{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 5 Basic Probability and Statistical Analysis Using SciPy\n",
    "\n",
    "# 5.1 Exploring the Relationships between Data and Probability Using SciPy\n",
    "\n",
    "The SciPy library includes an entire module for addressing problems in\n",
    "probability and statistics; `scipy.stats`. Lets import that module.\n",
    "\n",
    "**Listing 5. 1. Importing the `stats` module from SciPy**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from scipy import stats"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Chapter One we computed the probability of a fair coin producing at-least 16 heads after 20 flips. SciPy allows us\n",
    "to measure this probability directly using the `stats.binomial_test` method.\n",
    "\n",
    "**Listing 5. 2. Analyzing extreme head-counts using SciPy**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Probability of observing more than 15 heads or 15 tails is 0.01181793212890625\n"
     ]
    }
   ],
   "source": [
    "num_heads = 16\n",
    "num_flips = 20\n",
    "prob_head = 0.5\n",
    "prob = stats.binom_test(num_heads, num_flips, prob_head)\n",
    "print(f\"Probability of observing more than 15 heads or 15 tails is {prob:.17f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Our method-call returned the probability of seeing a coin-flip sequence where 16 or more coins fell on the same face. If we want the probability seeing exactly 16 heads, then we must utilize the `stats.binom.pmf` method.\n",
    "\n",
    "**Listing 5. 3. Computing an exact probability using `stats.binom.pmf`**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The probability of seeing 16 of 20 heads is 0.004620552062988271\n"
     ]
    }
   ],
   "source": [
    "prob_16_heads = stats.binom.pmf(num_heads, num_flips, prob_head)\n",
    "print(f\"The probability of seeing {num_heads} of {num_flips} heads is {prob_16_heads}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We’ve used `stats.binom.pmf` to find the probability of seeing exactly 16 heads. However, that method is also able to compute multiple probabilities simultaneously.\n",
    "\n",
    "**Listing 5. 4. Computing an array of probabilities using `stats.binom.pmf`**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "probabilities = stats.binom.pmf([4, 16], num_flips, prob_head)\n",
    "assert probabilities.tolist() == [prob_16_heads] * 2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "List-passing allows us to easily compute probabilities across intervals. For example, if we pass `range(21)` into `stats.binom.pmf`, then the outputted array will contain all probabilities across the interval of every possible head-count.\n",
    "\n",
    "**Listing 5. 5. Computing an interval probability using `stats.binom.pmf`**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total sum of probabilities equals 1.00000000000000\n"
     ]
    }
   ],
   "source": [
    "interval_all_counts = range(21)\n",
    "probabilities = stats.binom.pmf(interval_all_counts, num_flips, prob_head)\n",
    "total_prob = probabilities.sum()\n",
    "print(f\"Total sum of probabilities equals {total_prob:.14f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Plotting `interval_all_counts` versus `probabilities` will reveal the shape of our 20 coin-flip distribution.\n",
    "\n",
    "**Listing 5. 6. Plotting a 20 coin-flip Binomial Distribution**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "plt.plot(interval_all_counts, probabilities)\n",
    "plt.xlabel('Head-count')\n",
    "plt.ylabel('Probability')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The `stats.binom.pmf` methods allows to display any distribution associated with an arbitrary coin-flip count. Let's simultaneously plot the distributions for 20, 80, 140, and 200 coin-flips.\n",
    "\n",
    "**Listing 5. 7. Plotting 5 different Binomial distributions**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY4AAAEGCAYAAABy53LJAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAABIqUlEQVR4nO3deXgUVdb48e/JQghLCAECEcIeIM0WMAJuLCKKiOI2Cq8LuLy4O+rr+8qMv1F0ZhzHDdRBGRVHXEbUEQUVxQ0XRJaAgCIgCAhhh7BJICTk/P6o6tCELN3pLYHzeZ5+uqvqVvXpStOHe+vWvaKqGGOMMf6KiXYAxhhjahZLHMYYYwJiicMYY0xALHEYY4wJiCUOY4wxAYmLdgCR0LhxY23dunW0wzDGmBpl4cKFO1S1Sen1J0TiaN26NTk5OdEOwxhjahQR+bWs9dZUZYwxJiCWOIwxxgTEEocxxpiAnBDXOIwx0VdYWEhubi4HDx6MdiimlNq1a9OiRQvi4+P9Km+JwxgTEbm5udSvX5/WrVsjItEOx7hUlZ07d5Kbm0ubNm382seaqowxEXHw4EEaNWpkSaOaEREaNWoUUE0wrIlDRAaLyEoRWS0iY8rY3klEvhORAhG5x2d9RxFZ7PPYKyJ3utvGishGn21DwvkZjDGhY0mjegr07xK2xCEiscAE4DzAA4wQEU+pYnnAHcDjvitVdaWqZqlqFnAykA+861NknHe7qs4I12cIxm+/wSuvgI1ab4w53oSzxtELWK2qa1T1EDAFGOZbQFW3qeoCoLCC4wwEflHVMm9Eqa7efhtGjoSff452JMYYgA0bNjBgwAAyMzPp3LkzTz31VMm2vLw8Bg0aREZGBoMGDWLXrl1Bv9/999/PZ599FtA+33zzDZ07dyYrK4vly5fTpUsXAHJycrjjjjuCjilUwpk4mgMbfJZz3XWBGg68UWrdbSKyVEReEpGGVQ0wnLZscZ63bo1uHMYYR1xcHE888QTLly9n7ty5TJgwgZ9++gmARx55hIEDB7Jq1SoGDhzII488EvT7PfTQQ5x99tkB7fP6669zzz33sHjxYhITE0vWZ2dn8/TTTwcdU6iEM3GU1WgWUMONiNQCLgTe9ln9HNAOyAI2A0+Us+9oEckRkZzt27cH8rYhsW3b0c/GmOhKS0ujZ8+eANSvX5/MzEw2btwIwLRp0xg5ciQAI0eO5L333ivzGI8++ihdu3ale/fujBnjXLZdvHgxffr0oVu3blx88cUltZVRo0bxn//8B3CGPXrggQfo2bMnXbt2ZcWKFccc+8UXX+Stt97ioYce4sorrzxq25dffsnQoUMBGDt2LFdffTVnnXUWGRkZvPDCCwBs3ryZvn37kpWVRZcuXfjmm2+COV0VCmd33Fwg3We5BbApwGOcByxS1ZL/t/u+FpEXgA/K2lFVnweeB8jOzo74lQZLHMaU7847YfHi0B4zKwvGj/ev7Lp16/j+++/p3bs3AFu3biUtLQ1wEsy2Mv7hfvTRR7z33nvMmzePOnXqkJeXB8A111zDM888Q79+/bj//vt58MEHGV9GII0bN2bRokU8++yzPP7447z44otHbb/hhhuYPXs2Q4cO5bLLLmPdunXlxr906VLmzp3L/v376dGjB+effz5vvPEG5557Lvfddx+HDx8mPz/fv5NRBeGscSwAMkSkjVtzGA5MD/AYIyjVTCUiaT6LFwM/BhVlmHgrOVGo7BhjKvDbb79x6aWXMn78eJKSkvze77PPPuPaa6+lTp06AKSkpLBnzx52795Nv379AKe28vXXX5e5/yWXXALAySefXGFS8MewYcNITEykcePGDBgwgPnz53PKKafwr3/9i7Fjx/LDDz9Qv379oN6jImGrcahqkYjcBswEYoGXVHWZiNzkbp8oIs2AHCAJKHa73HpUda+I1AEGATeWOvSjIpKF0+y1rozt1YLVOIwpn781g1ArLCzk0ksv5corryz5IQdo2rQpmzdvJi0tjc2bN5OamnrMvqoaVHfihIQEAGJjYykqKgLg3HPPZevWrWRnZx9TA6lI6ThEhL59+/L111/z4YcfcvXVV/O///u/XHPNNVWOtyJhvY9DVWeoagdVbaeqf3XXTVTVie7rLaraQlWTVDXZfb3X3Zavqo1UdU+pY16tql1VtZuqXqiqm8P5GarKEocx1Yuqcv3115OZmcndd9991LYLL7yQyZMnAzB58mSGDRt2zP7nnHMOL730UkkTUF5eHg0aNKBhw4Yl1xNeffXVktqHP2bOnMnixYsDShrgXJM5ePAgO3fu5Msvv+SUU07h119/JTU1lf/+7//m+uuvZ9GiRQEdMxA25EgYqFpTlTHVzbfffsurr75K165dycrKAuDhhx9myJAhjBkzhssvv5xJkybRsmVL3n777WP2Hzx4MIsXLyY7O5tatWoxZMgQHn74YSZPnsxNN91Efn4+bdu25V//+lfYP0uvXr04//zzWb9+PX/605846aSTmDx5Mo899hjx8fHUq1ePV155JWzvL3oC3KGWnZ2tkZzIadcuSElxXmdmgtvjz5gT2vLly8nMzIx2GDXe2LFjqVevHvfcc0/lhQNQ1t9HRBaqanbpsjZWVRh4m6caNLCmKmPM8ceaqsLA2zzVuTN89x0UFUGcnWljTAiMHTs22iFYjSMcvLWMLl2c6x07d0Y3HmOMCSVLHGHgTRydOx+9bIwxxwNLHGHgbaryXmeynlXGmOOJJY4w2LYNGjaEFi2OLBtjzPHCEkcYbNsGqanOw7tsjIm+cePG0blzZ7p06cKIESNKZr2zYdUDY4kjDLZvhyZNnFpHbKw1VRlTHWzcuJGnn36anJwcfvzxRw4fPsyUKVMAG1Y9UJY4wsBb44iJgcaNrcZhTHVRVFTEgQMHKCoqIj8/n5NOOgmwYdUDZXcXhEFenlPbAOcOcnf0ZWOMj/4v9z9m3eWdL+eWU24hvzCfIa8POWb7qKxRjMoaxY78HVz21mVHbfty1JcVvl/z5s255557aNmyJYmJiZxzzjmcc845gA2rHiircYTBwYPgjrxMYqKzbIyJrl27djFt2jTWrl3Lpk2b2L9/P6+99prf+9uw6kdYjSMMDhxwEgY4zwcORDceY6qjimoIdeLrVLi9cZ3GldYwSvvss89o06YNTZo0AZwf8jlz5nDVVVfZsOoBshpHiKk6NYzatZ3l2rUtcRhTHbRs2ZK5c+eSn5+PqvL555+XDOpnw6oHxmocIVZQ4Dz71jhC0LPPGBOk3r17c9lll9GzZ0/i4uLo0aMHo0ePBrBh1QNkw6qHmHdI9fHj4fe/h8svhx9/tKHVjbFh1UPDhlU/DnmbpaypyhhzvLKmqhDz9qDybaqyXlXGmFA57odVF5HBIrJSRFaLyJgytncSke9EpEBE7im1bZ2I/CAii0Ukx2d9ioh8KiKr3OeG4fwMgfLWLqxXlTHmeBW2xCEiscAE4DzAA4wQEU+pYnnAHcDj5RxmgKpmlWpjGwN8rqoZwOfucrVhTVXGmONdOGscvYDVqrpGVQ8BU4Cj+rip6jZVXQAUBnDcYcBk9/Vk4KIQxBoyZTVVHToExcXRi8kYY0IpnImjObDBZznXXecvBT4RkYUiMtpnfVNV3QzgPh97p04UldVUBXadwxhz/Ahn4ijrFstA+v6erqo9cZq6bhWRvgG9uchoEckRkZztERyetqymKt/1xpjoue6660hNTS0Zrry0xx9/HBFhx44dJev+9re/0b59ezp27MjMmTODjqEqQ6QXFBRw9tlnk5WVxZtvvkn//v3x3mIwZMgQdu/eHXRcgQhn4sgF0n2WWwCb/N1ZVTe5z9uAd3GavgC2ikgagPtc5tizqvq8qmararZ3iIFIKK/GYYnDmOgbNWoUH3/8cZnbNmzYwKeffkrLli1L1v30009MmTKFZcuW8fHHH3PLLbdw+PDhoGKoyhDp33//PYWFhSxevJgrrrjiqG0zZswgOTk5qJgCFc7EsQDIEJE2IlILGA5M92dHEakrIvW9r4FzgB/dzdOBke7rkcC0kEYdpLKucfiuN8ZET9++fUlJSSlz21133cWjjz561DhQ06ZNY/jw4SQkJNCmTRvat2/P/Pnzj9l3wYIFnHbaaXTv3p1evXqxb98+Dh48yLXXXkvXrl3p0aMHs2bNAo4dIv26666jf//+tG3btsyEsm3bNq666ioWL15MVlYWv/zyy1HbW7duzY4dO1i3bh2dOnVi5MiRdOvWjcsuu6xkeJQxY8bg8Xjo1q1bSG4cDNt9HKpaJCK3ATOBWOAlVV0mIje52yeKSDMgB0gCikXkTpweWI2Bd90/YBzwb1X1/jfhEeAtEbkeWA/8LlyfoSqsqcoYP/XvX3mZoUPB+0PXvz+MGuU8duyAy44eVp0vv6xyKNOnT6d58+Z07979qPUbN26kT58+JcstWrRg48aNR5U5dOgQV1xxBW+++SannHIKe/fuJTExkaeeegqAH374gRUrVnDOOefw888/H/PeK1asYNasWezbt4+OHTty8803Ex8fX7I9NTWVF198kccff5wPPvigws+xcuVKJk2axOmnn851113Hs88+y3XXXce7777LihUrEJGQNGuF9QZAVZ0BzCi1bqLP6y04TVil7QW6l7EeVd0JDAxhmCFlTVXG1Cz5+fn89a9/5ZNPPjlmW1lDMpUemXblypWkpaVxyimnAJCUlATA7Nmzuf322wHo1KkTrVq1KjNxnH/++SQkJJCQkEBqaipbt26lRYuyfhYrl56ezumnnw7AVVddxdNPP82dd95J7dq1ueGGGzj//PNLajvBsDvHQ8yaqozxU6A1BN/yjRsHVcPw9csvv7B27dqS2kZubi49e/Zk/vz5tGjRgg0bjnQOzc3NLZk10Ku84db9HQfQO9w6HBlyfcKECSUz+82YMaO8XY9R1nDrcXFxzJ8/n88//5wpU6bwj3/8gy+++MLvY5bFxqoKsQMHQARq1XKWranKmOqta9eubNu2jXXr1rFu3TpatGjBokWLaNasGRdeeCFTpkyhoKCAtWvXsmrVKnr16nXU/p06dWLTpk0sWLAAgH379lFUVETfvn15/fXXAfj5559Zv349HTt29CumW2+9lcWLF7N48eJjElVF1q9fz3fffQfAG2+8wRlnnMFvv/3Gnj17GDJkCOPHj2fx4sV+H688ljhC7MABJ1l4E781VRlTfYwYMYJTTz2VlStX0qJFCyZNmlRh+c6dO3P55Zfj8XgYPHgwEyZMIDY29qgytWrV4s033+T222+ne/fuDBo0iIMHD5b0wOratStXXHEFL7/88lG1i3DIzMxk8uTJdOvWjby8PG6++Wb27dvH0KFD6datG/369WPcuHFBv48Nqx5it98O//437NzpLK9YAZmZ8MYbMHx4REIwplqyYdXDa926dQwdOpQff/yx8sJlsGHVo8hb4/CypipjzPHGEkeI+c43DtZUZYyJjNatW1e5thEoSxwhdvBg2YnDelUZY44XljhCzJqqjDHHO0scIVa6qSo+HmJiLHEYY44fljhC7ODBo2scIs6yNVUZY44XljhCrHSNA2z6WGOqgw0bNjBgwAAyMzPp3LlzyVhSAHl5eQwaNIiMjAwGDRrErl27SrbZsOrHssQRYpY4jKme4uLieOKJJ1i+fDlz585lwoQJ/PTTTwA88sgjDBw4kFWrVjFw4EAeeeQRwIZVL48ljhAr3VQF1lRlTHWQlpZGz549Aahfvz6ZmZklI91OmzaNkSOd2RpGjhzJe++9V7LehlU/liWOELMahzH+6d+/Py+//DIAhYWF9O/fn9deew1wRqzt378/b775JgB79uyhf//+TJ06FYAdO3bQv39/3n//fQC2bNkS0HuvW7eO77//nt69ewOwdetW0tLSACfBbNvmzA+3ceNG0tOPzEdX0bDqTz31FEuWLOGzzz4jMTGRCRMmAM6w6m+88QYjR47kYBn/g1yxYgUzZ85k/vz5PPjggxQWFh613Tus+plnnsnixYtp165duZ9r5cqVjB49mqVLl5KUlMSzzz5LXl4e7777LsuWLWPp0qX8v//3/wI6V2WxxBFiljiMqd5+++03Lr30UsaPH18yBHp5qjqselxcHLNnz+bqq68G/BtWvXHjxiXDqldV6WHVZ8+eTVJSUsmw6lOnTqVOnTpVPr6XDaseYtZUZYx/vvQZFj0+Pv6o5Tp16hy13KBBg6OWGzdufNRys2bN/HrPwsJCLr30Uq688kouueSSkvVNmzZl8+bNpKWlsXnzZlJTUwFsWPVyWI0jhIqKnIfVOIypflSV66+/nszMTO6+++6jtl144YVMnjwZgMmTJzNs2LCS9Tas+rGsxhFCpWf/80pMhE2bIh+PMeaIb7/9lldffZWuXbuSlZUFwMMPP8yQIUMYM2YMl19+OZMmTaJly5a8/fbbwNHDqsfFxVU6rPqBAwdITEzks88+45ZbbuGmm26ia9euxMXFRXRY9RtvvJGMjAxuvvlm9uzZw7Bhwzh48CCqasOq+ytSw6pv3w6pqfDMM3DbbUfWjxgBCxdCGc2bxpwwbFj18LJh1Wuoimoc1lRljDlehDVxiMhgEVkpIqtFZEwZ2zuJyHciUiAi9/isTxeRWSKyXESWicjvfbaNFZGNIrLYfQwJ52cIhCUOY0y0RHJY9bBd4xCRWGACMAjIBRaIyHRV/cmnWB5wB3BRqd2LgP9R1UUiUh9YKCKf+uw7TlUfD1fsVeXtOWW9qowpW3k9kEx0BXrJIpw1jl7AalVdo6qHgCnAMN8CqrpNVRcAhaXWb1bVRe7rfcByoHkYYw2JymocJ8DlJGPKVbt2bXbu3Bnwj5QJL1Vl586d1C79P94KhLNXVXNgg89yLtA70IOISGugBzDPZ/VtInINkINTM9lVxn6jgdEALVu2DPRtq6SixFFcDIWFUKtWREIxptpp0aIFubm5bN++PdqhmFJq165NixYt/C4fzsRRVn00oP9qiEg94B3gTlXd665+Dvize6w/A08A1x3zRqrPA8+D06sqkPetqoqaqrzbLXGYE1V8fDxt2rSJdhgmBMLZVJULpPsstwD8vptBROJxksbrqjrVu15Vt6rqYVUtBl7AaRKrFiqqcfhuN8aYmiyciWMBkCEibUSkFjAcmO7PjuJcPZsELFfVJ0ttS/NZvBiITDcCP1jiMMacCMLWVKWqRSJyGzATiAVeUtVlInKTu32iiDTDuU6RBBSLyJ2AB+gGXA38ICKL3UP+UVVnAI+KSBZOU9U64MZwfYZA+dNUZYwxNV1Yhxxxf+hnlFo30ef1FpwmrNJmU/Y1ElT16lDGGEreGkXpxGE1DmPM8cTuHA+hggLnuXTi8A5P491ujDE1mSWOELKmKmPMicASRwh5axTx8UevtxqHMeZ4YokjhLyTOJUeUcFqHMaY44kljhAqKDhSu/BlNQ5jzPHEEkcIlTVtLFiNwxhzfLHEEUJW4zDGnAgscYSQ1TiMMScCSxwhVFBQceKwGocx5nhgiSOEDh6suKnKahzGmOOBJY4QKq/GERcHMTFW4zDGHB/8ShwiMlRELMlUorwah4iz3mocxpjjgb/JYDiwSkQeFZHMcAZUk5VX4wBnvdU4jDHHA78Sh6pehTN96y/Av0TkOxEZLSL1wxpdDVNejQOsxmGMOX743fzkTt36DjAFSMOZRGmRiNwepthqHKtxGGNOBP5e47hQRN4FvgDigV6qeh7QHbgnjPHVKFbjMMacCPydyOkyYJyqfu27UlXzReS60IdVM5V3AyA46y1xGGOOB/42VW0unTRE5O8Aqvp5yKOqocobcgSc9dZUZYw5HvibOAaVse68UAZyPLAahzHmRFBh4hCRm0XkB6CTiCz1eawFllZ2cBEZLCIrRWS1iIwpY3snt4dWgYjc48++IpIiIp+KyCr3uaH/Hzd8Dh+GoiKrcRhjjn+V1Tj+DVwATHOfvY+T3S665RKRWGACTs3EA4wQEU+pYnnAHcDjAew7BvhcVTOAz93lqCtvvnEvq3EYY44XlSUOVdV1wK3APp8HIpJSyb69gNWqukZVD+F04x1W6uDbVHUBUBjAvsOAye7rycBFlcQREd7EYTUOY8zxrrJeVf8GhgILAQV8J0VVoG0F+zYHNvgs5wK9/Yyron2bqupmAFXdLCKpZR1AREYDowFatmzp59tWnbc2YTUOY8zxrsLEoapD3ec2VTi2lLFOI7CvU1j1eeB5gOzs7ID2rQqrcRhjThQVJg4R6VnRdlVdVMHmXCDdZ7kFsMnPuCrad6uIpLm1jTRgm5/HDCurcRhjThSVNVU9UcE2Bc6qYPsCIENE2gAbcQZK/C8/46po3+nASOAR93man8cMK6txGGNOFJU1VQ2o6oFVtUhEbgNmArHAS6q6TERucrdPFJFmQA6QBBSLyJ2AR1X3lrWve+hHgLdE5HpgPfC7qsYYSlbjMMacKCprqjpLVb8QkUvK2q6qUyvaX1VnADNKrZvo83oLTjOUX/u663cCAyt632jwp8bhvdcjzt+BXowxphqq7CesH87AhheUsU2BChPHicSfGgc4CcYShzGmJqusqeoB9/nayIRTc/lzA6C3XN26kYnJGGPCwd9h1RuJyNMiskhEForIUyLSKNzB1STeGkdFTVW+5Ywxpqbyd5DDKcB24FKcIda3A2+GK6iaKJAahzHG1GT+tranqOqffZb/IiIXhSGeGstqHMaYE4W/NY5ZIjJcRGLcx+XAh+EMrKaxGocx5kRR2bDq+0RkL3AjzrhVh9zHFOCu8IdXcxwvNY71e9Yz+LXBLNu2rPLCxpgTUoWJQ1Xrq2qS+xyjqnHuI0ZVkyIVZE1Q02scqsrM1TNJjEskZ1MON35wI8VaHO2wjDHVkL9NVYhIQxHpJSJ9vY9wBlbTeGsS8fFlb6/uNY75G+cz+PXBfLz6Yx4b9BjfbviWj1Z9FO2wjDHVkL/dcW8AvsYZAuRB93ls+MKqebzTxkpZ4/pypMZRXRPHN+u/AeDc9ucyousI4mPiS9YZY4wvf2scvwdOAX51x6/qgdMl17gKCsq/vgFHtlXXpqq5uXNp27AtqXVTqR1Xmx5pPZibOzfaYRljqiF/u+MeVNWDIoKIJKjqChHpGNbIahhvjaM81b3GMTd3Lv1a9ytZHt1zNL8d+i2KERljqit/E0euiCQD7wGfisgu/J9b44RQk2scuXtz2bhvI32a9ylZd33P66MYkTGmOvMrcajqxe7LsSIyC2gAfBy2qGqgmlzjaFq3KfNumEd6UvpR67fv386BogO0bBD+qXeNMTVHIL2qeorIHUA3IFdVD4UvrJqnJtc44mPj6dW8F2n100rWqSpdnuvC/bPuj2JkxpjqyN9eVfcDk4FGQGPgXyLy/8IZWE1Tk2scLyx8gZmrZx61TkTo3bw3CzYtiFJUxpjqyt8axwjgFFV9wB1qvQ9wZfjCqnkqq3HExTlddatjjeNPs/7EW8veOmZ9ZuNMVuet5nDx4ShEZYyprvxNHOsA3/9PJwC/hDyaGqyyGodI9Zw+dm/BXrbu30pGo4xjtmU0yuDQ4UOs37M+CpEZY6qryqaOfQZnpr8CYJmIfOouDwJmhz+8mqOgAFJSKi6TkFD9ahyr81YDkJFSRuJw163KW0Wbhm0iGpcxpvqqrMaRAywE3gX+CMwCvgTuAyodj0JEBovIShFZLSJjytgu7gRRq0VkqYj0dNd3FJHFPo+9InKnu22siGz02TYkkA8cLpXVOKB61jhW7VwFUGaNo3uz7ky+aDJdU7tGOixjTDVW2dSxk72vRaQW0MFdXKmqhRXtKyKxwASc2kkusEBEpqvqTz7FzgMy3Edv4Dmgt6quBLJ8jrMRJ3l5jVPVxyv9dBFU2TUOqJ41jjW71gDQPqX9MduSaydzTfdrIh2SMaaa87dXVX9gFU4ieBb42Y9BDnsBq1V1jdt1dwowrFSZYcAr6pgLJItIWqkyA4FfVPVXf2KNlppa4xhzxhi2/M8W6sTXKXP7j9t+ZNbaWRGOyhhTnfl7cfwJ4BxV7aeqfYFzgXGV7NMc2OCznOuuC7TMcOCNUutuc5u2XhKRhmW9uYiMFpEcEcnZvj38w2r5U+OojolDRGhar2m52x/86kFu/ODGCEZkjKnu/E0c8W7zEQCq+jNQzgDiJcoaJ1YDKeM2j10IvO2z/TmgHU5T1macpHbsQVSfV9VsVc1u0qRJJaEG78ABSEysuEx1TBy3fngrM1bNKHd7RkoGa3evpai4KIJRGWOqM38Tx0IRmSQi/d3HCzgXzSuSC/iOYdGCY8e3qqzMecAiVd3qXaGqW1X1sKoWAy/gNIlFlap/iSMx0SlXXew+uJtnc56tcLa/jJQMioqLWLd7XeQCM8ZUa/4mjpuAZcAdOEOs/+Suq8gCIENE2rg1h+HA9FJlpgPXuL2r+gB7VHWzz/YRlGqmKnUN5GLgRz8/Q9gcOgTFxVCn7MsEJerUgfz8yMTkj4p6VHl5t/288+eIxGSMqf4qHeRQRGKAharaBXjS3wOrapGI3IYz6VMs8JKqLhORm9ztE4EZwBBgNZAPXOvzvnVwemSVbmB/VESycJq01pWxPeK8tYiaVuPw9qhq17BduWW829buWhuRmIwx1V+liUNVi0VkiYi0VNWAbiFW1Rk4ycF33USf1wrcWs6++ThjY5Vef3UgMUSCNxlUVuOobonDe0d4q+RW5ZZpWq8ps0bOoktql0iFZYyp5vydjyMN587x+cB+70pVvTAsUdUw3uanymoc1a2pKr8wn6Z1m5KUkFRumRiJoX/r/pELyhhT7fmbOB4MaxQ1XE1tqnqg/wPc36/yYdO/WvcVG/Zu4KpuV0UgqipQha++gqwsSE6OdjTGHPcqvDguIrXdoT5+B3QCvlXVr7yPSARYE3hrETXt4jg493FUZvKSydz72b0RiKYKdu6ESy6BAQOgSxf44otoR2TMca+yXlWTgWzgB5yusWXeM3GiC6TGUVTkPKqDi6ZcxOtLX6+0XKsGrdi8bzOHDlfDubsmToQPP4T77oP69WHIENi4MdpRGXNcqyxxeFT1KlX9J3AZcGYEYqpxArk47ls+mvYW7GXaymls2lf51PEtG7REUXL35kYgsgDddx9s2AB/+YuTQIqK4LHHoh2VMce1yhJHyUCGqlpN/p9c/QRycdy3fDT9utsZ+quiHlVe3jLefaqNHTuc56bukClt28LVV8M//wlbtkQvLmOOc5Ulju7ukOZ7RWQf0M37WkT2RiLAmiCQpirf8tHk7YrbskHLSsu2auAmjj3VKHGsXw/Nm8M77xy9/o9/dAYOmzix7P2MMUGrbFj12EgFUpP5e3HcmziqRY3DTQLepFCRVsmtWH37atIbpFdaNmLi4uDuu52eVL4yMuCMM+Ddd2Hs2GhEZsxxz9/uuKYC/tY4vImlOtQ44mLi6NS4U4Uj4/qWbZdS/t3lUXHSSfC3v5W97Q9/cLKzqjNnrzEmpPwdq8pUoCZeHB998miW37qcGPHvKzDlxyn8Y/4/whyVn3bvhk8/dQYJK8t558Gll1rSMCZMLHGEgLfpqbKJnKrTxfFAvbviXZ6a91S0w3C8/z6ccw58/335ZVatgldfjVxMxpxALHGEwIEDTtKo7D+41anG0f/l/jz2rf/dVtOT0sndm4szvFiUffghpKXBKaeUX2byZBg1CvZaHw5jQs0SRwgcOFB5MxVUn8RRVFzEN+u/YW+B/z+q6UnpHCw6yI78HWGMzA+q8PXXzp3iMRV8fW+7zel5lVT+OFzGmKqxi+MhkJ9f+YVxqD5NVZv2baJYiwPqJeXttrth7waa1A3/jIrl+uUX2LwZ+lYy5X2zZpGJx5gTkNU4QqCm1Tg27HGmeU9P8j9xeJPMlt+ifGPd1187z5UlDoD//Me5s7waev/995k/fz4ARUVFrFq1KsoRGeM/Sxwh4G+No7rcx7Fhr5s4AqhxZDXL4uB9BxmSMSRcYfnn66+hcWPo1KnysgsWOMOPRPuEl7Jr1y6uvfZaJk2aBMC0adPo378/W+xud1NDWOIIAX/mG4fqU+NISkiif+v+AdU44mLiSIhLCGNUfvr6a6e24U9X2759obAQ5s0Lf1wBaNiwIfPmzWPcuHEAZGRkcOGFF9KwYcMoR2aMfyxxhIC/TVVxcRAfH/3EMSRjCLNGzqJB7QYB7ffXr//K+LnjwxOUPzZuhLVr4Uw/x9o8/XQnwXibt6qBnJwcVJV27dpRx/3SdOvWjeeee46EhGqQmI3xgyWOEPC3qQqq55wc/vp0zae8s/ydyguGS06O83zqqf6VT04Gj8dpsqoGvvvuO0455RRee+21MrcvWbKEESNGcCDa/7MwphJhTRwiMlhEVorIahEZU8Z2EZGn3e1LRaSnz7Z1IvKDiCwWkRyf9Ski8qmIrHKfo16/97fGAdVjFsD+L/fnhuk3BLxfeoP0kgvrUXHhhU6No0cP//fJznYSRzW4/6Rnz55MnDiRSy65pMztu3fv5vPPP2f58uURjsyYwIQtcYhILDABZwIoDzBCRDylip0HZLiP0cBzpbYPUNUsVc32WTcG+FxVM4DP3eWoCqTGkZgY/RrH8h3LEQIfjiM9KZ2N+zZyuPhwGKLygwi0bg21avm/T3Y2bNsGudGfSyQhIYEbb7yRunXrlrm9X79+/Prrr/Ts2bPM7cZUF+GscfQCVqvqGlU9BEwBhpUqMwx4RR1zgWQRSavkuMNwZibEfb4ohDFXib8Xx8GpmUSzxlFQVMC2/duqNNJtelI6RcVFbN2/NQyRVUIVbrwx8Klhs93/c+TkVFwuzJ577jneeuutSsslJiaiquRH+38XxlQgnImjOeDbrpHrrvO3jAKfiMhCERntU6apqm4GcJ9Ty3pzERktIjkikrN9+/YgPkblalJTlXcWv0B6VHm1bNCS1Lqp5B3IC3VYldu+HaZPh9WrA9uve3enV0IUr3OoKi+//DJTp071q+xZZ53F9ddfH4HIjKmacN45XlZbSOmG5orKnK6qm0QkFfhURFaoqt/dY1T1eeB5gOzs7LA2cNekpirvPRz+TOBU2vkdzmfrPVGobQCkpsKmTVBcHNh+iYnO/ByHo9S8BogI3333Hfv27fOr7LBhw0iyoVJMNRbOxJEL+P63tgVQeoLrcsuoqvd5m4i8i9P09TWwVUTSVHWz26y1LUzx+6WoyHn4W+OoUwd27QpvTBVJrp3M1d2uJqNRRvSCqCoRiK3C3GKzZoU+lgDFxMTQoIF/3Z/vvPPO8AZjTJDC2VS1AMgQkTYiUgsYDkwvVWY6cI3bu6oPsMdNCHVFpD6AiNQFzgF+9NlnpPt6JDAtjJ+hUv5O4uQV7aaqrGZZvHLxK1WqcQBc8+41jPtuXIij8sPIkfDAA5F/3yDt3buXbt268eGHHwa038GDB5kzZ06YojImOGFLHKpaBNwGzASWA2+p6jIRuUlEbnKLzQDWAKuBF4Bb3PVNgdkisgSYD3yoqh+72x4BBonIKmCQuxw13manmnIfx4HCA0ENjZ6zKYdv1n8Twoj8UFzsTAW7o4oj827Y4Fzr+M9/QhuXH7Zv306zZs1ISUkJaL+HHnqIfv36kZcXhetJxlQirKPjquoMnOTgu26iz2sFbi1jvzVA93KOuRMYGNpIq87f2f+8ol3juPjNi9lfuJ9vrq3aj3/LBi1Zv2d9iKOqxM8/w759R3pIBappU0hPh3r1QhuXH9q1a8cnn3wS8H7XXXcd/fr1o379+mGIypjg2LDqQQq0xhHti+O/7vkVT5PSt9P4r1WDVizcvDCEEfnB25W2oombKlKrFnzwQeji8VNhYSFFRUUk+vvl8NG+fXvat28fhqiMCZ4NORKkQGsc0byPQ1VZv2c9LZOqdn0DnBrHjvwd5BdGMPstWOCcOH9GxK3Ivn2B98oKwsyZM2nUqBHfVzTFbQU2btzI+PHjbQgSU+1Y4ghSVS6OFxRE9PerRN6BPPIL82mV3KrKx+jUuBMnp53M7oO7QxdYZXJynGFG4oKoIL/zDjRo4DR7RUjr1q0ZPXo0Hk/Vang//PADd911F3Pnzg1xZMYExxJHkKrSVAXRqXX8uudXoGr3cHhd6rmUnNE5nFT/pFCFVbGiIvj++6o3U3l17OjcfR7BO8i7dOnC+PHjqzzq7YABA1izZg0DBgwIcWTGBMcSR5Cq0lTlu18kpSSm8Mcz/kj3pmX2O6iefvrJOVknnxzccTp1ck5+hO4g3759e9Cz+iUkJNCmTZsQRWRM6FjiCFJVaxzRuEDeOrk1fx34V9qltKvyMVSVUyedyuNzHg9hZBUI9sK4V1wc9OwZsRrHq6++SocOHcgNcnDFdevWcfPNN9vUsqZascQRpJpU49i8b3PQ1yZEhNy9ufy47cfKC4dCw4YwZAhkhOBO9+xsp9mrqCj4Y1Xid7/7Ha+88gotWrQI6jgiwmuvvcayZctCFJkxwbPEEaSqXBz33S+S7vj4Dvq82Cfo40T0Xo6LL4YPP4SYEHxVs7OdE//TT8EfqxLp6elcffXVQR+nVatW5OXlcdFFFwUflDEhYokjSPv3O8+B1ji8+0XS+j3rg7ow7tWqQauSC+1hdfhwaDOst7krzM1VS5Ys4YMPPqCwsDAkx4uPjw/JcYwJFUscQdqzxxl3z9/E4R3nbs+e8MVUnrW71tKqQdW74nq1atCK9XvWU1Qc5iaf77+HpCT4+OPKy/qjfXvneGFOHM8//zwjRowIamgXX5s2beKss87i/fffD8nxjAmWJY4g7dnjTG0tfk6ol5x8ZL9I2lewj+3524O6MO7Vu0VvhnYYym+HfgtBZBVo1AjuvRe6dg3N8WJijkwlG0ZPPvkks2fPplYgMxVWoEmTJhw8eJBDhw6F5HjGBMuGHAnS7t1HkoE/vGV37w59LBVZu3stAO0aBp84Lup0ERd1uijo41SqTRv4y19Ce8y77gp7l7aEhAS6dw9dl+f4+HgbKddUK1bjCNLu3Uean/zhLRvpxNG0blOeHfIsvVv0DtkxQ9UUU66cHPgtxLWaoUPh8stDe0wf//nPf3jyyScpDsPQAKpKQUFByI9rTKAscQTJ21Tlr9q1nTH3It1U1bReU24+5eaQXBxXVVqPb819X9wXgsjKkZ8PffrAIyEeNV8VFi4MW8+qGTNmMHnyZGJC0QvMx/79+2nZsiXjxkVhLhRjSrHEEaRAaxwiTqKJdI1j6dalrNixIiTHEhFqxdbil12/hOR4ZVqyxOlVVdWh1Cty7rnw5JOhPy7w0ksv8e2334b8uHXr1mX48OEhbQIzpqrsGkeQAr3GAU6iiXTi+L9P/4+dB3ay4L9Dc2G4bcO2/JIXxsQRqjvGSxOBqVOhdevQHtdHvTDN+/HYY4+F5bjGBMpqHEEKtKkKnPKRbqr6ZdcvtG3YNmTHa9ewXXhrHAsWQLNmcFIYBlPs2xdaBt9kV9p9993H//7v/4b8uL52794d9DAmxgTLEkcQioqcKR4CaaqCyDdVHS4+zLrd62ibHLrE0bZhW3Yf3M2uA7tCdsyj5OQ4zVT+9nMORF4e/OMfIR9ifdeuXewO4x+2uLiYDh06cP/994ftPYzxhzVVBWHvXue5KjWODRtCHU35NuzdQFFxUUju4fA6Lf00bu91e3huAty3D1asgOHDQ39scO5Gv/12ePpp6NAhZId99tlnQ3asssTExPDUU0/ZzIAm6sJa4xCRwSKyUkRWi8iYMraLiDztbl8qIj3d9ekiMktElovIMhH5vc8+Y0Vko4gsdh9DwvkZKuJtbqrKNY5INlWt2bUGIKRNVaemn8rT5z1Nk7pNQnbMEgsXOr2fwnFhHJzmr7Q0mD8/ZIcsisDAiQAjRozglFBf9zEmQGFLHCISC0wAzgM8wAgRKT0V2nlAhvsYDTznri8C/kdVM4E+wK2l9h2nqlnuY0a4PkNlvK0S1b2pKqtZFu+PeJ+eaT1DetxDhw+xM39nSI8JgLdX0qmnhv7Y4DR/nXbakfcJgd69e3P33XeH7HgVWbRoUVh6bhnjr3DWOHoBq1V1jaoeAqYAw0qVGQa8oo65QLKIpKnqZlVdBKCq+4DlQPMwxlol3h//qjRVHTgAkRpBIiUxhaEdhpJcOzmkx/VM8HDHx3eE9JgAzJ4NXbo4Q6qHy+mnw9q1sHFj0Ic6fPgw5557Lj17hjYxl2f06NHce++9EXkvY8oSzmsczQHflvxcoPRty2WVaQ5s9q4QkdZAD2CeT7nbROQaIAenZnLMFVoRGY1Ti6FlGHrQQHBNVd79m4Shpae0qcun0rx+85DeNQ7QoVEHftoehhvpJkyArVtDf1xfZ5zhPH/7bdB3ksfGxvLwww+HICj/vPDCCzRvXu3+H2VOIOGscZTVHab0GBUVlhGResA7wJ2q6l6K5jmgHZCFk2CeKOvNVfV5Vc1W1ewmYfp1Dqapynf/cLv9o9t5Nif0F249TTys2LGCw8WHQ3vgtm3D10zllZXlDGkcgiaf1atXh3/4FR89evQgNTU1Yu9nTGnhTBy5QLrPcgtgk79lRCQeJ2m8rqpTvQVUdauqHlbVYuAFnCaxqAimqcp3/3DafXA3m/ZtwtO49OWl4HmaeDhYdJB1u9eF7qBffAHPPx/+Wfri46F3b6dZLAh79+7F4/EwduzY0MTlp48++shuCDRRE87EsQDIEJE2IlILGA5ML1VmOnCN27uqD7BHVTeLiACTgOWqetTYECKS5rN4MRChOUyP5W2qSkoKbL9IzsmxfPtywPmRDzXvMZdtD+G0plOmwIMPOpOchNsZZ8DixU733yqKi4vj+eef53e/+13o4vLDJ598wjPPPBOx3lzG+Apb4lDVIuA2YCbOxe23VHWZiNwkIje5xWYAa4DVOLWHW9z1pwNXA2eV0e32URH5QUSWAgOAu8L1GSqzezfUrx/4b1wkaxzeaxCdUzuH/Nidm3Tm72f/nczGmaE76D//CYsWhefGv9L69nXm8l1R9TG86tSpw6hRo+jSpUsIA6vcgw8+yNq1a4mLs1uxTOSF9VvndpWdUWrdRJ/XCtxaxn6zKfv6B6oa/ETOIVKVcaog8okjMS4xJDP/lVY/oT7/d/r/hfagItC0aWiPWZ7+/Z27yKs44dKBAweYOnUqw4YNC9v4VOVJCrSaa0wI2ZAjQajKOFUQ2aaqv5z1FxbduIjYmPA0/Wz9bStzNoRokqHJk2HUKIjUnBNxcVVOGuA0F1111VXMmzev8sJh8Nlnn9GnTx/2eocwMCZCLHEEIdAh1b3q1XNmMY1EjSMxPpFOjTuF7fh/m/03zn7l7NAMPfLWWzBnDiQkBH8sf335pdPDavPmykoe44ILLmD27Nn069cv5GH5o27duogIG0NwL4oxgbDEEYSqNlXFxERmaPUtv23h7pl3s3LHyrC9R/ZJ2RwoOhD8/RyHDsFXX8GgQaEJzF8NG0JKitNkFaCYmBhOP/30qF1nOPXUU/nuu+/IzAzhNSZj/GCJIwhVbaqCyIxXNWfDHMbNHUfegcB/FP3Vu7lzU+G83CCba+bMgf37I584und3ugB3DqzzwNtvv82DDz7IoUjd/l+BgoICfgv1FLvGVMASRxCq2lQFkRmval7uPOJj4umR1iNs79E+pT0piSnM2xhk4nj3XWde3bPPDk1ggdq5EwoL/S4+Z84cpk6dSnx8fBiDqtyePXto0aIF48ePj2oc5sRiiaOKCgudH/5Gjaq2f6NGsH17SEM6xryN88hqlkXtuNphew8RoXfz3sElDlVnVr5zz3UuAEXanDlOT64vvvB7l3HjxjF37lwkEt2GK9CgQQNuv/32qF1nMScmSxxVtH49FBdDmzZV279NG2eMvXA5XHyYnE05JU1J4fTwwId587I3q36ABQsgNxcuuSR0QQWiZ0+ntjN1auVlcZqGABITE8MZld/uv/9+zjzzzGiHYU4gljiqaI0zxQVtqzjFRdu2zjh++/eHLiZfuXtzqVurLn1a9AnPG/jIapYV3J3pU6c6XWMvuCB0QQWidm04/3x47z04XPG4W3l5eaSnp/Pqq69GJjY/bd++nVdeeSXaYZgThCWOKvrFnW47mMQBRxJQqLVKbsWW/9nC8C5hmkXPh6ry8uKX+eDnDwLfubgY3nwTBg4M7zDqlbnsMti2rdLmqoKCAi644AKysrIiE5efXnzxRUaNGsW6deuiHYo5Adh4BVW0Zo1z79hJJ1Vtf9/E0bVr6OLyJSLESvjHfBIRnl3wLDESw9AOQwPbuaDAuekv2rPaXXihc+Hpn/+ssGdXWloakyZNimBg/rn55pu56KKLaN26dbRDMScAq3FU0Zo1znWKmCqewXDWOPIL8+nwTAfeXvZ26A9ejgs7Xsj8jfPZ+luA82gkJsIDD8CQqM0A7EhIcBLYtGmwZUuZRT788EPWhKuKGKTk5OSS+zkiOcS7OTFZ4qiiNWugXbuq75+S4nTlDcfv0GdrPmNV3ioaJkau6eeCDhegKB+u+tD/nTZvhnfeCagbbFiNHu0M5/7SS8dsKiws5MYbb+TOO++MfFwB+NOf/hTxkXrNiccSRxWoOtc4qnp9A5yx/Nq2DU/imL5yOkkJSfRt1Tf0By9Ht6bdSE9KZ/rK0iPnV+Bf/4IrroANGyovGwkdOjjNVE89dUyvhfj4eObPn1/t75do0KABjRo1suHWTVjZNY4q2LUL9u4NLnGAs/+yEE5lAXDo8CHe//l9BrcfTK3Yqg/gFygR4YIOF7Bk6xJU1b/7G+69F846K/gTGUpjx8KAAc7MgOecA8Du3btJTk7mpKpe0Iqge+65J9ohmBOA1TiqINgeVV5t2zr3chQXBx+T1xs/vMG2/du4Nuva0B3UT38f9He+ufYb/5LG3r3ORCZ9wt9dOCCnnebcpOMmjQMHDtCrVy/uvffeKAcWmFWrVvHUU09FOwxznLLEUQXB3sPh1bat06loU+kJdYPQvVl37upzF+e2Ozd0B/VTvVr1EBF2H9xN4eEKrlt89hm0bg3z50cstoB45wP57jsSEhK44oorGDx4cHRjCtCkSZN46KGH2Lo1wM4KxvjBEkcVLHdmY63yXeNe3sTjPV4oZDXL4slzn4zaUBg/bf+J9HHpvLmsnDvJ8/Kc3ktNm0KEZ80LRPHUqWw77TRiPvqIP//5zwwYMCDaIQXkL3/5C4sWLaJppCbFMicUSxwBUnWmxT799OCHVTrtNOcYU6YEH9fegr1cO+1aNu6N7twMnRp3IiMlg7tn3n1s19y9e+G885wb7V57DerUiU6Qfrj7yy85tXFj9vQO/5At4RAXF0erVs6sjxMmTGDy5MlRjsgcTyxxBGjOHFi5Eq6/Pvhj1avndCp6800IZlTsYi3mpg9u4tUlr/Lrnl+DDywIMRLDqxe/yr5D+xj53sgjTVa//ur0WFq0CN5+G04+Oapxlsd7D8SIK6/khrvvJqlRI+cP/tZbUY6saoqLi5k2bRozZsyovLAx/lLVsD2AwcBKYDUwpoztAjztbl8K9KxsXyAF+BRY5T43rCyOk08+WUPluutU69VT3bcvNMf79ltVUH3ppartv/vAbh32xjBlLPqXr/4SmqBCYOKCicpY9LyJZ+qhv/9NtUED1fr1Vd99N9qhlam4uFj/67/+S8eOHXvsxhtucP5Il1+u+tNPkQ8uSIcOHdI9e/aoqurq1av1D3/4g27fvj3KUZmaAMjRsn7by1oZigcQC/wCtAVqAUsAT6kyQ4CP3ATSB5hX2b7Ao95EAowB/l5ZLKFIHMXFqpMmqdau7SSPUCkuVu3USTU9XfWrr/wpX6wFRQWqqvr1uq81+ZFkjXkwRp+e+7QWFxeHLrCqKCxU3bBBNT9fVVXnPHC95ifGq4IWn322fvX5v3Tj3o16uPhwVMLbv3+/btmypWT5jTfe0L/+9a8lyyNGjNBHHnnk2B0PHVJ94AHVOnWcfzK9e6uOHas6fbrqkiWq27apHo7OZwrUhAkTNCEhoSRxfPLJJ/r000e+O/n5+VpYWBjNEE01Eo3EcSow02f5D8AfSpX5JzDCZ3klkFbRvt4y7us0YGVlsVQ1cTz0kGqvxFp6TUKMLmtYS39KrqVnxIveVDdBtWNH1Y4d9dRaMXp5s1rqmeBRzwSPdqkToyM7Ni05RtdaMfo/dWN1bWotXdeklmbGit6flKjarp1qu3aaESs6onWixt/pUW7ppC1jRS9o2kE7dVJ9642t2joGfbhujK5LidUfk0VbxaDPJCWqtmql25o319Yxok+fN0BVVTevXatt4+L0jWuvVVXVX+fM0baxsfpOo0aq6em6ulkzbRMbq9MbNVJt3lx/Sk3V1rGx+vEtt6iq6uIZM7R1bKx+fv/9qqq64OWXtVVsrH7dqJFqWpp+26iRtoqJ0bkpKarNmumshg21ZUyMLnzsMVVVnfnoo5oO+oNbfXr/kUc0vW5dXTllii7fvly5AiUJjb0rVlP+nqIpV6doSmqK5ubm6tItSzXtmjSNS47TjL9laOY/MjXtv9K0UWoj3bVrl87dMFebXdFM4xrEaadxndQzwaNNL2uqjVIb6aFDh/TzNZ9r6kWpGtcgruRv0eSCJtq8VXNVVZ2+Yro27NdQY+rElGxv2LehtmnfRg/7+6O/fbvqww+rZmerijj/fLyPm25yyhw8qHrSSar/+Iez/OuvqhkZRz86dDjycL9H+vzzR8p36qQ6bZqznJOjmpl55OHxlP3wll+40FmeM8dZ/uijY8ru7Nix5PWNDRtqs7i4kvLXDhqkzePiVFevVlXVGwcM0NMSE0vK356SokPr1Ttq/0vq1y8pf+2ZZ+rwpCRVt4Zz1ckn6zUNGpSUvyIpSa+/6KKSU3rxxRfrzTffXLJ8wQUX6O9///uS5cGDB+s999xTsjxw4ED94x//WLLct29ffeCBB0qW+/Tpc9R/Bk4++WR99NFHS5a7deum48aNU1XnP2Eej0cnTJigqqoFBQXq8Xj0efdvsW/fPvV4PPryyy+rqmpeXp56PB59/fXXVVV169at6vF49K233lJV1Q0bNqjH49F33Vr1mjVr1OPx6AcffKCqqitWrFCPx6OffPKJqqr+8MMP6vF4dNasWaqqumjRIvV4PDp79mxVVZ07d656PB6dP3++qqp+88036vF49Pvvv1dV1S+++EI9Ho8uW7ZMVVVnzpypHo9Hf/75Z1VV/eCDD/SJJ57QYJSXOMJ5A2BzwPeW4Fyg9JXGsso0r2Tfpqq6GUBVN4tIallvLiKjgdEALVu2rNIHOOkkSK7XgHgOsa5xfWrFQ7Ntu2lYv74z5agIJ+3dTFKzOiXDiu9rnEvj5s1KjpHeuB616sSR27QuAK1W7aR+06bQtTeI0HrvFpJaNeL8Xh7W/qLUrb+BxCbpdM2EhsnxtG9UF1LrsrFJfQqLhcyft5Pctg2070ZCYSGnz5tHp269AKiVmMhpLVvSNCMDgNpJSZzWujWpHTtC06Yk5udzRk4OTTIzITWVuvv303fhQhp16ABA/caN6dumDSlud7EGzZvTv21bGnbrBikpJO/aRf8lS0ju0QOSk2mUl8dZS5fSID0dgCZZWZx92mnUd8dManrWWZy9ciV1zziDRsmNeObyZ/h3/r855bRTOFznMGsPr0UOCbVr1yZREunQpgO1e9amc1pn4urEsbXdVpKLk4mPj6dOfB3at2tPYnYimamZxMbHsrn9ZlITUhER6teqT/sO7dny25aSv8XGDhtJb5iOqtKgdgO6ndWN3zJ/o00T5/Nl3pLJY+c8Roy/A441bgx/+IPz2LcPfvzRmUdkyxbwuMPKqzrjbnm7zCUkQHb2kWOolv061f0a16oF3bodmZO4Tp0jvc98y5fmnYoyMdGJpa7zfSMp6UhsrhSf189lZvK3wsKS8pedcw6n7NjhxAFkd+lCqs/naxUXR+LBgyXLbWJiSCksLCnfrnVrCnbscO7RAdq3bIkcOFBSvn1xMYk+AzF26NCBlJQjEWVkZBx1o2VGRgbp7verrO0dOnQgLS2tZLlTp040a3bk319mZuZRPcs8Hg+pqalHLTdp0gRwbmL1eDw0btwYcOaU93g8JfHFxsbi8Xho6I7iHBcXh8fjIdn9W8XHxx+1XKtWLTweDw3cv03t2rXxeDwkJSUBznwuHo+H+vXrA1CnTh08Hg/13F43devWxePxUMftRFKvXj08Hk/JPDDe5dq1nYna6tevj8fjISEhAYCkpKSw9aoTrejLGMyBRX4HnKuqN7jLVwO9VPV2nzIfAn9T1dnu8ufA/+E0UZW5r4jsVtVkn2PsUtUKB2XKzs7WnJyc0H5AY4w5zonIQlXNLr0+nL2qcoF0n+UWQOlb3corU9G+W0UkDcB93hbCmI0xxlQinIljAZAhIm1EpBYwHCg9At504Bpx9AH2uM1QFe07HRjpvh4JTAvjZzDGGFNK2K5xqGqRiNwGzMTpJfWSqi4TkZvc7ROBGTg9q1YD+cC1Fe3rHvoR4C0RuR5YD9gY0sYYE0Fhu8ZRndg1DmOMCVw0rnEYY4w5DlniMMYYExBLHMYYYwJiicMYY0xAToiL4yKyHajqsLGNgR0hDCdULK7AWFyBsbgCU13jguBia6WqTUqvPCESRzBEJKesXgXRZnEFxuIKjMUVmOoaF4QnNmuqMsYYExBLHMYYYwJiiaNyz0c7gHJYXIGxuAJjcQWmusYFYYjNrnEYY4wJiNU4jDHGBMQShzHGmIBY4qiAiAwWkZUislpExkQxjnQRmSUiy0VkmYj83l0/VkQ2ishi9zEkCrGtE5Ef3PfPcdeliMinIrLKfa5woq0wxNTR55wsFpG9InJnNM6XiLwkIttE5EefdeWeHxH5g/t9Wyki50Y4rsdEZIWILBWRd0Uk2V3fWkQO+Jy3iRGOq9y/W5TP15s+Ma0TkcXu+kier/J+G8L7HStrPll7KDjDuf+CMxthLWAJ4IlSLGlAT/d1feBnwAOMBe6J8nlaBzQute5RYIz7egzw9yj/HbcAraJxvoC+QE/gx8rOj/s3XQIkAG3c719sBOM6B4hzX//dJ67WvuWicL7K/LtF+3yV2v4EcH8Uzld5vw1h/Y5ZjaN8vYDVqrpGVQ8BU4Bh0QhEVTer6iL39T5gOc687NXVMGCy+3oycFH0QmEg8IuqVnXkgKCo6tdAXqnV5Z2fYcAUVS1Q1bU489T0ilRcqvqJqha5i3NxZt6MqHLOV3mier68RESAy4E3wvHeFangtyGs3zFLHOVrDmzwWc6lGvxYi0hroAcwz111m9u08FKkm4RcCnwiIgtFZLS7rqk6MzniPqdGIS6v4Rz9Dzra5wvKPz/V6Tt3HfCRz3IbEfleRL4SkTOjEE9Zf7fqcr7OBLaq6iqfdRE/X6V+G8L6HbPEUT4pY11U+y6LSD3gHeBOVd0LPAe0A7KAzTjV5Ug7XVV7AucBt4pI3yjEUCZxph2+EHjbXVUdzldFqsV3TkTuA4qA191Vm4GWqtoDuBv4t4gkRTCk8v5u1eJ8ASM4+j8nET9fZfw2lFu0jHUBnzNLHOXLBdJ9llsAm6IUCyISj/PFeF1VpwKo6lZVPayqxcALhKmaXhFV3eQ+bwPedWPYKiJpbtxpwLZIx+U6D1ikqlvdGKN+vlzlnZ+of+dEZCQwFLhS3UZxt1ljp/t6IU67eIdIxVTB3606nK844BLgTe+6SJ+vsn4bCPN3zBJH+RYAGSLSxv2f63BgejQCcdtQJwHLVfVJn/VpPsUuBn4svW+Y46orIvW9r3Eurv6Ic55GusVGAtMiGZePo/4nGO3z5aO88zMdGC4iCSLSBsgA5kcqKBEZDNwLXKiq+T7rm4hIrPu6rRvXmgjGVd7fLarny3U2sEJVc70rInm+yvttINzfsUhc+a+pD2AITi+FX4D7ohjHGTjVyaXAYvcxBHgV+MFdPx1Ii3BcbXF6aCwBlnnPEdAI+BxY5T6nROGc1QF2Ag181kX8fOEkrs1AIc7/9q6v6PwA97nft5XAeRGOazVO+7f3OzbRLXup+/ddAiwCLohwXOX+3aJ5vtz1LwM3lSobyfNV3m9DWL9jNuSIMcaYgFhTlTHGmIBY4jDGGBMQSxzGGGMCYonDGGNMQCxxGGOMCYglDmN8iMhvpZZHicg/QnTsL0UkOxTHCvB9k0Xklki/rzl+WeIw5viXDFjiMCFjicMYP7l3BL8jIgvcx+nu+l4iMscd1G6OiHR01yeKyBR3cL43gcRyjhsrIo+LM6/JUhG53V0/0D3mD+7gfgnu+nUi0th9nS0iX7qvx7rlvhSRNSJyh/sWjwDt3LkhHgvnOTInhrhoB2BMNZMo7oQ8rhSODDXzFDBOVWeLSEtgJpAJrAD6qmqRiJwNPIxz9/DNQL6qdhORbjh3EZdlNM7cCD3cY6SISG2cu5IHqurPIvKKe7zxlcTfCRiAMzfDShF5Dmc+hi6qmuXvSTCmIpY4jDnaAd8fWBEZBXivS5wNeJzhgQBIcsfqagBMFpEMnOEf4t3tfYGnAVR1qYgsLec9z8YZ3qPILZsnIt2Btar6s1tmMnArlSeOD1W1ACgQkW1A00o/sTEBssRhjP9igFNV9YDvShF5Bpilqhe7cyJ86bP5mDF9RORi4AF38Qacoa5Llytr+GuvIo40M9cuta3A5/Vh7N+4CQO7xmGM/z4BbvMuiEiW+7IBsNF9Pcqn/NfAlW7ZLkA3AFV9V1Wz3EeOe9yb3CG6EZEUnOav1iLS3j3W1cBX7ut1wMnu60v9iHsfTtOVMSFhicMY/90BZLsXsH8CbnLXPwr8TUS+xZnj3Os5oJ7bRPV/lD989YvAemCpiCwB/ktVDwLXAm+LyA9AMTDRLf8g8JSIfINTq6iQOnNDfCsiP9rFcRMKNjquMcaYgFiNwxhjTEAscRhjjAmIJQ5jjDEBscRhjDEmIJY4jDHGBMQShzHGmIBY4jDGGBOQ/w81mDd8sY3IhgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "flip_counts = [20, 80, 140, 200]\n",
    "linestyles = ['-', '--', '-.', ':']\n",
    "colors = ['b', 'g', 'r', 'k']\n",
    "\n",
    "for num_flips, linestyle, color in zip(flip_counts, linestyles, colors):\n",
    "    x_values = range(num_flips + 1)\n",
    "    y_values = stats.binom.pmf(x_values, num_flips, 0.5)\n",
    "    plt.plot(x_values, y_values, linestyle=linestyle, color=color,\n",
    "             label=f'{num_flips} coin-flips')\n",
    "plt.legend()\n",
    "plt.xlabel('Head-count')\n",
    "plt.ylabel('Probability')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The plotted distributions grow more dispersed around their central positions as these central positions relocate right.\n",
    "\n",
    "## 5.2. Mean as a Measure of Centrality\n",
    "\n",
    "Suppose we've measured noon-time measurements over course of the 7 days.  These temperatures are stored in a NumPy array.\n",
    "\n",
    "**Listing 5. 8. Storing recorded temperatures in a NumPy array**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "measurements = np.array([80, 77, 73, 61, 74, 79, 81])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We'll now attempt to summarize our measurements using a single central value. First, we'll plot the sorted temperatures in order to evaluate their centrality.\n",
    "\n",
    "**Listing 5. 9. Plotting the recorded temperatures**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "measurements.sort()\n",
    "number_of_days = measurements.size\n",
    "plt.plot(range(number_of_days), measurements)\n",
    "plt.scatter(range(number_of_days), measurements)\n",
    "plt.ylabel('Temperature')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Based on the plot, a central temperature exists somewhere between 60 degrees and 80 degrees. Let’s quantitate our estimate as the mid-point between the lowest value and the highest value in the plot.\n",
    "\n",
    "**Listing 5. 10. Finding the midpoint temperature**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The midpoint temperature is 71.0 degrees\n"
     ]
    }
   ],
   "source": [
    "difference = measurements.max() - measurements.min()\n",
    "midpoint = measurements.min() + difference / 2\n",
    "assert midpoint == (measurements.max() + measurements.min()) / 2\n",
    "print(f\"The midpoint temperature is {midpoint} degrees\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let’s mark that midpoint in our plot using a horizontal line. We’ll draw the horizontal line by calling `plt.axhline(midpoint)`.\n",
    "\n",
    "**Listing 5. 11. Plotting the midpoint temperature**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAD4CAYAAAD2FnFTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAp8UlEQVR4nO3deXxV5bX/8c9KQiAEEqaASZgVQUgVMaJo64RVwbFOxdY6tLf03tbeetv6q3S4/XV41d5af7d2uN5atGC1Cg5otSgOrR3EARCUgExiIBMkgCQBEjKt3x9nB0M4gRPIzklyvu/XK69z9vCcvY5CFvvZ63kec3dERERaS4p3ACIi0jUpQYiISFRKECIiEpUShIiIRKUEISIiUaXEO4CONGTIEB89enS8wxAR6TZWrFixw92zoh3rUQli9OjRLF++PN5hiIh0G2a2pa1j6mISEZGolCBERCQqJQgREYlKCUJERKJSghARkah6VBWTiEgieXplCXcvWU/p7hpyBqRxx8XjuerU3A77fCUIEZFu6OmVJcx5ajU19Y0AlOyuYc5TqwE6LEmoi0lEpBv62QvrDiSHZjX1jdy9ZH2HXUN3ECIiXdy+ugbeK6uioKSKgpJKCkqrKK2sjXpu6e6aDruuEoSISBdSWVPPmtJK1pRUsaY0kgzer9hD89pug9NTmZSbSdGuFPbsbzikfc6AtA6LRQlCRCROduzZz5rSyF3BmtJKCkqq2Lpr34Hj2Zl9mJSTyWUnZ5OXk0lebibDMnpjZoc8gwBI65XMHReP77D4lCBERELm7myrqj3QRdScDLZVfdRNNGpwX/JyM/j06SPIy81kUk4GQ/r1bvMzmx9Eq4pJRKSbcHe27tpHQYsuojUllezcWweAGRyf1Y8zxw4KEkEmE3MyyEzr1e5rXXVqbocmhNaUIEREjlJjk/PBjj0tHh5Xsqa0iurayLOBlCTjxGH9mX7S0AN3BSdlZ9A3tXv86u0eUYqIxFldQxMby6tZU1J1IBGsLa068Aygd0oSE7IzuOKUHPJyM8nLyeTE4/rROyU5zpEfvVAThJn9B/AvgAOrgVuBvsACYDRQCFzv7h9GaXsJcC+QDMx195+GGauIJIZYRh/X1jeyblv1Qc8L1m+rpq6xCYD01GQm5WQya+qIAw+Pj89KJyW5Zw0tM2+uneroDzbLBf4JTHT3GjNbCCwGJgK73P2nZnYnMNDdv9WqbTKwAfgkUAwsA25w97WHu2Z+fr5rwSARaUu0yp8+KUl88ZyxDOybGrkzKKliU8UeGpsivxsH9O1FXk4mk3IzmJSTSV5OBqMHp5OUZPH6Gh3KzFa4e360Y2F3MaUAaWZWT+TOoRSYA5wXHJ8PvAp8q1W7qcAmd98MYGaPAVcCh00QIiKH89PnDx19XNvQxK/+sgmAIf1687HcDC6aNCySDHIzyB2QhlnPSAbtFVqCcPcSM/s5sBWoAV509xfNbJi7lwXnlJnZ0CjNc4GiFtvFwBnRrmNms4HZACNHjuzIryAi3Vh5dW3keUHw8Lh1WWlrb317OkMz+nRihF1faAnCzAYS+Vf/GGA38LiZ3Rhr8yj7ovaFufv9wP0Q6WJqf6Qi0p25OyW7az4qKy2JPEAur95/4JwxQ9I5deQAqmvrqao9dPRx7oA0JYcowuxiuhD4wN0rAMzsKeAsYLuZZQd3D9lAeZS2xcCIFtvDiXRPiUgCa2pyCnfujYw+Dp4XFJRWsntfPQBJBuOG9ufj44YceHh8UnZ/+veJjDHojNHHPUmYCWIrcKaZ9SXSxTQdWA7sBW4Gfhq8PhOl7TJgnJmNAUqAWcBnQoxVRLqYhsYm3q/Y+9H4gpIq1pZVHZh/KDU5ifHH9WdG3nFMDB4eTzgug7TUtstKO2P0cU8S5jOIN83sCeBtoAFYSaQrqB+w0My+QCSJXAdgZjlEyllnunuDmd0GLCFS5vqgu68JK1YRia/9DY1s2LYneFYQ6SJ6r6yK/Q2RstI+vZKYmJ3B1VNyD1QUjRvan9SU9peVhj36uCcJrcw1HlTmKtL1Raaurj7wvKCgpIoN26tpCMpK+/dOYVJuxoEuorzcDMYM6UdyDykr7WriWeYqIgmssqaetaUfPTwuKK1ic8UeglzAoPRU8nIzOXd8VpAQMhgxsG+PGWPQ3SlBiEhMjjQCeeee/RQEU1evDR4ib9n50dTVx2X0IS83g0s/ln3gzuC4jD4JO8agO1CCEJEjirb+8f954l1eKNhGQ5OzprSSshYrnI0cFJm6+vr82Kaulq5JCUJEjija+sd1jU28sGYbJwztx9Qxgz6ajiI7k8y+7Z+6WroeJQgRadPG7dUsWFbU5vrHAC9//dxOjEg6kxKEiBxk7/4G/ry6jAXLilix5UNSkow+vZKorW865NzcDlz/WLoeJQgRwd15p7iSBcu28qdVpeyta+T4rHS+M/MkPjUll39u3KERyAlICUIkgX24t45FK0tYuLyIdduqSeuVzKUnZzPr9BGcNmrggQojjUBOTEoQIgmmqcl5ffNOHltWxJKCbdQ1NnHK8Ex+8qmPcfkp2QfmLWpNI5ATjxKESIIoq6zhieXFLFxRRNGuGjLTevGZM0by6dNHcFJ2RrzDky5ICUKkB6tvbOKV98pZuLyIV9eX0+Rw1vGD+eZF47l40nH06dV910uW8ClBiPRAmyv2sGB5EU+uKGHHnv0My+jNl887gevyhzNqcHq8w5NuQglCpIeoqWtkcVCe+lbhLpKTjAsmDGXW6SM498QsUpLbP/OpJDYlCJFurqCkkseWbeWZlaVU729g9OC+fOuSCVwzJVerpMkxUYIQ6YYq99XzzDslPPZWEWvLquidksSlH8vm+tNHcMaYQZoATzqEEoRIN+HuvLF5FwuXF7F4dRn7G5qYlJPBj66cxBWTc8lM0/xH0rFCSxBmNh5Y0GLXWOA/gWlA8/DLAcBud58cpX0hUA00Ag1tLWgh0tOVV9XyxNvFLFxWROHOffTvk8L1+SP49OmRmVJFwhLmkqPrgckAZpZMZG3pRe7+i+ZzzOweoPIwH3O+u+8IK0aRrqqhsYlX11fw2LIi/rq+nMYmZ+qYQfz79HHMyMs+7LrLIh2ls7qYpgPvu/uW5h0W6SS9Hrigk2IQ6fK27NzLwuVFPL68mPLq/Qzp15svfmIs1+cPZ2xWv3iHJwmmsxLELODRVvs+AWx3941ttHHgRTNz4Lfufn+0k8xsNjAbYOTIkR0Urkjnqa1vZMmabTz2VhGvb95JksH544dy/ekjuGDCUHqpPFXiJPQEYWapwBXAnFaHbuDQpNHS2e5eamZDgZfMbJ27/731SUHiuB8gPz/fOyhskdCtLa1iwbKtPL2qlMqaekYMSuObF53ItaeN4LhMladK/HXGHcQM4G133968w8xSgKuB09pq5O6lwWu5mS0CpgKHJAiRrqz1Os63nX8CTTgLlhXxbnElqclJXJJ3HLNOH8GZYweTlKTyVOk6OiNBRLtTuBBY5+7F0RqYWTqQ5O7VwfuLgB+GG6ZIx4q2jvOcRasBmHBcf75/+USumpzLwPTUeIYp0qZQE4SZ9QU+CXyp1aFDnkmYWQ4w191nAsOARcFgnxTgj+7+QpixinS0u5esP2QdZ4Csfr15/muf0GA26fJCTRDuvg8YHGX/LVH2lQIzg/ebgVPCjE0kTGWVNZTsrol6bMee/UoO0i1oJLVIB6qtb2TuPzbzm7++3+Y5OVrHWboJJQiRDuDuvLh2Oz/+81qKdtVwyaTjOH30QH7+4gat4yzdlhKEyDHaVF7ND55dyz827mDc0H48/IUz+Pi4IQAM7tdb6zhLt6UEIXKUKmvquffljTz0eiFpqcl8//KJ3HjmqIMGtmkdZ+nOlCBE2qmpyXl8RRE/e2E9u/bVMev0kXzzohMZ3K93vEMT6VBKECLtsGLLh/zg2TW8W1zJaaMGMv+KqZpRVXosJQiRGGyvquW/nl/HUytLGJbRm3tnTeaKU3JUrio9mhKEyGHsb2jkwX8W8uu/bKS+0fnyecfzlfNPIL23/upIz6c/5SJt+Mu67fzw2bUU7tzHhScN43uXncSowenxDkuk0yhBiLTyfsUefvTcWl5dX8HYrHTmf34q556YFe+wRDqdEoRIoLq2nl/9ZRO/f+0D+qQk891LT+KmaaNJTdF6DJKYlCAk4TU1OU+tLOGnz69jx579XJ8/nDsunkBWf5WtSmJTgpCEtqpoN9//0xreKdrNqSMH8MDN+ZwyYkC8wxLpEpQgJCGVV9dy9wvreXxFMVn9e3PPdafwqVNztWCPSAtKEJJQ6hqamL+0kHtf2cj+hka+dO5YvnrBOPqpbFXkEKH9rTCz8cCCFrvGAv8JDAC+CFQE+7/t7oujtL8EuBdIJrKQ0E/DilUSw6vry/nhc2vZXLGXCyYM5buXnsTYrH7xDkukywotQbj7emAygJklAyXAIuBW4L/d/edttQ3O/w2R1eiKgWVm9id3XxtWvNJzFe7Yy4//vJaX3ytnzJB0HrwlnwsmDIt3WCJdXmfdV08H3nf3LTFOTTAV2BSsLIeZPQZcCShBSMz27m/g13/dxAP/+IBeycacGRO49ewxKlsViVFnJYjWa1DfZmY3AcuBb7j7h63OzwWKWmwXA2eEG6L0FO7OM6tKuev599hetZ9rpgznW5eMZ2hGn3iHJtKthP5PKTNLBa4AHg923QccT6T7qQy4J1qzKPu8jc+fbWbLzWx5RUVFtFMkgawuruTa/32d2xesYlhGH5768lncc/0pSg4iR6Ez7iBmAG+7+3aA5lcAM/sd8FyUNsXAiBbbw4HSaB/u7vcD9wPk5+dHTSLS8+3cs5+fv7iex5YVMTg9lZ9dezLXThmuslWRY9AZCeIGWnQvmVm2u5cFm58CCqK0WQaMM7MxRB5uzwI+E3ag0v3UNzbxh9e38N8vb6CmrpEvnD2Gf79wHBl9esU7NJFuL9QEYWZ9iVQifanF7p+Z2WQiXUaFzcfMLIdIOetMd28ws9uAJUTKXB909zVhxirdzz837uAHz65hY/kePjFuCN+/fBInDFXZqkhHCTVBuPs+YHCrfZ9r49xSYGaL7cXAIeMjRIp27ePHf17LkjXbGTmoL7+7KZ8LTxqqxXtEOpiGj0q3sa+ugftefZ/f/n0zyWbccfF4vvDxMfTplRzv0ER6JCUI6XKeXlnC3UvWU7q7hpwBaXzzohNJTk7irsXvUVZZy5WTc7hzxgSyM9PiHapIj6YEIV3K0ytLmPPUamrqGwEo2V3DNx5/hyaHSTkZ/PKGUzl99KA4RymSGJQgpEu5e8n6A8mhWZPDgLRe/Om2j5OsslWRThNTgjCzUcA4d3/ZzNKAFHevDjc0SQS19Y28V1ZFQWkVa0oqKdldE/W8ypp6JQeRTnbEBGFmXwRmA4OIjIAeDvwvkfmVRGJWXVvP2tKPkkFBaSXvV+ylsSkyvnFg3170Tklif0PTIW1zBuh5g0hni+UO4itEJs97E8DdN5rZ0FCjkm7vw711FJRWsqa0ioKSyOsHO/YeOD4sozd5OZlckpdNXk4GebmZZGf24ZlVpQc9gwBI65XMHRePj8fXEElosSSI/e5e11xjbmYptDEvkiSm8qpaCkorKSj5KBm07CoaMSiNSdmZXDMll0m5mUzKyWBo/+hzI111ai7AQVVMd1w8/sB+Eek8sSSIv5nZt4E0M/sk8GXg2XDDkq7I3Sn+sIY1QTJYU1pJQWkVFdX7ATCDMUPSOW3UQG4+axR5OZlMzMlgQN/Udl3nqlNzlRBEuoBYEsS3gH8BVhOZFmMxMDfMoCT+mpqcwp17D3peUFBSRWVNPQDJSca4of0498Qs8nIymJSbyUnZGVq6U6QHOezfZjNLAt519zzgd50TknS2hsYmNlXsadFFVMna0ir21kWeA6QmJzEhuz8zP5ZNXm4GeTmZjD+uv0Ywi/Rwh00Q7t5kZu+Y2Uh339pZQcnRaT0COVrffW19Ixu2Vx94eFxQWsW6sqoDlUN9U5OZmJ3BdfkjmJSTwaScTMYN60evZK3CJpJoYukPyAbWmNlbwIEyFHe/IrSopN2ijUC+88l3+WDHXgalpx5IBhu3V9MQlJVm9ElhUk4mN00bRV5uJpNyMhkzJF3jDUQEiC1B/CD0KOSYRRuBXNvQxL2vbARgcHoqebmZXDAhi7ycTPJyMxk+ME0zoIpIm46YINz9b50RiByb0jZGIAO8MWc6wzJ6KxmISLscsWPZzKrNrCr4qTWzRjOr6ozgJHbZmdHHFeQOSOO4zD5KDiLSbrHcQfRvuW1mVxEZWX1YZjYeWNBi11jgP4Fc4HKgDngfuNXdd0dpXwhUA41Ag7vnH+maieza04bzy79sOmifRiCLyLFod2mKuz8NXBDDeevdfbK7TwZOA/YBi4CXgDx3PxnYAMw5zMecH3yGksMRvL9jL2m9ksnO7IMRuXO46+qPacCZiBy1WCbru7rFZhKQT/un2pgOvO/uW4AtLfa/AVzbzs+SVsoqa3ihYBufP3s037l0YrzDEZEeIpYqpstbvG8ACoEr23mdWcCjUfZ/noO7oVpy4EUzc+C37n5/tJPMbDaR2WYZOXJkO8PqGR55YytN7tw0bXS8QxGRHiSWBDHX3V9rucPMzgbKY7mAmaUCV9CqK8nMvkMk4TzSRtOz3b00mDn2JTNb5+5/b31SkDjuB8jPz0+4SQRr6xt59K2tTJ8wjBGD+sY7HBHpQWJ5BvGrGPe1ZQbwtrtvb95hZjcDlwGfdfeov9TdvTR4LSfy7OKID8YT0XPvlrFzbx23nj063qGISA/T5h2EmU0DzgKyzOzrLQ5lAO2ZhOcGWnQvmdklRCYAPNfd97Vx7XQgyd2rg/cXAT9sxzUTgrszf2kh44b246zjB8c7HBHpYQ53B5EK9COSRPq3+KkixgfLZtYX+CTwVIvdvw4+5yUzW2Vm/xucm2Nmi4NzhgH/NLN3gLeAP7v7CzF/qwTx9tYPWV1Syc1njdY4BxHpcG3eQQQjqP9mZvOC6qN2C+4QBrfad0Ib55YCM4P3m4FTjuaaiWTe0i3075PCp1TKKiIhiOUh9T4zuxuYBBwYruvuRxwLIeHZXlXL86vLuOWs0aRrDQYRCUEsD6kfAdYBY4hM3FcILAsxJonBI29soVGlrSISolgSxGB3fwCod/e/ufvngTNDjksOY39DI398ayvTJwxl5GCVtopIOGLpm6gPXsvM7FKgFBgeXkhyJH9+t4wde+q4+azR8Q5FRHqwWBLEj80sE/gGkfEPGcB/hBqVtMndmbe0kBOG9uPjJwyJdzgi0oMdaU3qZGCcuz8HVALnd0pU0qaVRbt5t7iSH105SaWtIhKqwz6DcPdGItNkSBcx77VC+vdO4eop6uUTkXDF0sW01Mx+TWRSvZZrUr8dWlQS1faqWhavLuOmaSptFZHwWRtTIX10gtlfo+z2rjgOon///n7aaacdtO/666/ny1/+Mvv27WPmzJmHtLnlllu45ZZb2LFjB9dee+gA8X/7t3/j05/+NEVFRXzuc5875Pg3vvENLr/8ctavX8+XvvSlQ45/97vf5cILL2TVqlXcfvvthxz/yU9+wllnncXSpUv59re/fcjxX/ziF0yePJmXX36Zf/3Gdyj+cB+TRwygT6/IbCe//e1vGT9+PM8++yz33HPPIe3/8Ic/MGLECBYsWMB99913yPEnnniCIUOGMG/ePObNm3fI8cWLF9O3b1/+53/+h4ULFx5y/NVXXwXg5z//Oc8999xBx9LS0nj++ecB+NGPfsQrr7xy0PHBgwfz5JNPAjBnzhxef/31g44PHz6chx9+GIDbb7+dVatWHXT8xBNP5P77I5P8zp49mw0bNhx0fPLkyfziF78A4MYbb6S4uPig49OmTeOuu+4C4JprrmHnzp0HHZ8+fTrf+973AJgxYwY1NQcv63rZZZfxzW9+E4DzzjuP1nrSn70f//jHhxzXn72e8WcvKytrRVtr7sSyopyeO3QBdY2NbK+qZWDf1APJQUQkTLHcQQwDfgLkuPsMM5sITAvGRnQp+fn5vnz58niHEYpFK4v5jwXv8NDnp3LOiVnxDkdEeggza/MOIpaBcvOAJUBOsL0BuL1DIpOYzVu6hbFZ6SptFZFOE0uCGOLuC4EmAHdvABpDjUoOsnLrh7xTtJtbzhpNUpJKW0Wkc8SSIPaa2WCCdajN7EwiYyKkk8xfWkg/lbaKSCeLpVby68CfgOPN7DUgixjXg5BjV15dy59Xl3HjmaPop9JWEelEsVQxvW1m5wLjAQPWu3v9EZpJB/njm1upb9SsrSLS+Y7YxWRmfYB/B35EZLrvrwT7jtRufLBiXPNPlZndbmaDzOwlM9sYvA5so/0lZrbezDaZ2Z3t/WI9QV1DE4+8uZXzx2cxZkh6vMMRkQQTyzOIh4gsFvQrIsuFTgT+cKRG7r7e3Se7+2TgNGAfsAi4E3jF3ccBrwTbBwnmgPoNMCO43g1BeW1Ceb6gjIrq/Zq1VUTiIpZO7fHu3nL5z78Ga0W3x3TgfXffYmZXAucF++cDrwLfanX+VGBTsPQoZvYYcCWwtp3X7dZ+/1ohY4ekc844jXsQkc4Xyx3EyqByCQAzOwN4rZ3XmQU8Grwf5u5lAMHr0Cjn5wJFLbaLg32HMLPZZrbczJZXVFS0M6yua1XRblYV7eamaaNU2ioicRFLgjiDyIR9hWZWCLwOnGtmq83s3SM1NrNUIjPCPt6OuKL9Row65Nvd73f3fHfPz8rqOf/Sbi5tveY0lbaKSHzE0sV0yTFeYwbwtrtvD7a3m1m2u5eZWTZQHqVNMTCixfZwIivZJYTy6lqee7eUz54xiv59esU7HBFJUEe8g3D3LUAVkAkMbv5x9y3BsSO5gY+6lyAypuLm4P3NwDNR2iwDxpnZmOAOZFbQLiE8+mZRUNo6Kt6hiEgCO+IdhJn9CLgFeJ+PunkcOOJ032bWF/gk0HIu4p8CC83sC8BW4Lrg3BxgrrvPdPcGM7uNyBxQycCD7r4m1i/VnUVKW7dw7olZjM3qF+9wRCSBxdLFdD1wvLvXtffD3X0fkTuOlvt2Eqlqan1uKTCzxfZiYHF7r9ndPV9QRnn1fv7r2tHxDkVEElwsD6kLgAEhxyGB+UsLGTMknXNV2ioicRbLHcRdREpdC4D9zTvdXWtVd7B3i3fz9tbdfP/yiSptFZG4iyVBzAf+C1hNMOW3hGPe0kLSU5O5VqWtItIFxJIgdrj7L0OPJMHt2LOf594p44apI1TaKiJdQiwJYoWZ3UWkzLRlF9PboUWVgB59cyt1jU3cpHmXRKSLiCVBnBq8ntliX0xlrhKb+sYmHn5zC+ecmMXxKm0VkS4ilvUgzu+MQBLZCwXb2F61n7uu1sA4Eek6YlkPYpiZPWBmzwfbE4NBbtJB5i0tZNTgvpx3YrR5C0VE4iOWcRDziIxozgm2NwC3hxRPwlldXMmKLR9y07TRKm0VkS6lzQRhZs3dT0PcfSFBiau7NwCNnRBbQpi3tJC+qclcl6/SVhHpWg53B/FW8LrXzAYTzMMUrA1RGXZgiWDHnv08+04p10wZToZKW0WkizncQ+rm/o6vEylxPd7MXgOygGvDDiwRPPZWpLT15rP0cFpEup7DJYgsM/t68H4RkYnzjMhYiAuBIy4WJG2rb2zi4Te28olxQzhhaP94hyMicojDdTElA/2A/kA6kWSSDPQN9skxWLJmG9uqarlFA+NEpIs63B1Embv/sNMiSTDzlxYyclBfzhuv0lYR6ZoOdwehmsuQFJRUsqzwQ26aNopklbaKSBd1uDuIQxb1aS8zGwDMBfKIVEF9nsgYivHBKQOA3e4+OUrbQqCaSEltg7vnH2s8XcX8pYWk9UrmuvwRRz5ZRCRO2kwQ7r6rAz7/XuAFd782WFu6r7t/uvmgmd3D4Utmz3f3HR0QR5exc89+nnmnlOvzh5OZptJWEem6Ypms76iYWQZwDpH1rAmWLK1rcdyILGeaUJP+PbasiLqGJm6eNjreoYiIHFYsU20crbFABfB7M1tpZnPNLL3F8U8A2919YxvtHXjRzFaY2ey2LmJms81suZktr6io6LjoQ9DQ2MTDb2zh4ycMYdwwFYKJSNcWZoJIAaYA97n7qcBe4M4Wx28AHj1M+7PdfQowA/iKmZ0T7SR3v9/d8909Pyura6/j/OLa7ZRV1nKzSltFpBsIM0EUA8Xu/maw/QSRhNE8z9PVwIK2Grt7afBaTmSg3tQQY+0U814rZMSgNC6YoNJWEen6QksQ7r4NKDKz5oql6cDa4P2FwDp3L47W1szSzax/83vgIqAgrFg7w5rSSt4q3MVNZ45WaauIdAuhPaQOfBV4JKhg2gzcGuyfRavuJTPLAea6+0xgGLAo8hybFOCP7v5CyLGGqrm09XqVtopINxFqgnD3VcAh4xfc/ZYo+0qBmcH7zcApYcbWmXbtreOZVaVcc9pwMvuqtFVEuocwn0FI4LFlW9nf0KR5l0SkW1GCCFlDYxMPv76Fs44fzIkqbRWRbkQJImQvrd1OaaVmbRWR7kcJImTzlhYyfGAa008aFu9QRETaRQkiRO+VVfHmB7s0a6uIdEtKECGav7SQPr2SVNoqIt2SEkRIPtxbx6KVJXzq1OEM6Jsa73BERNpNCSIkC5YXsb+hiZvPGhXvUEREjooSRAgaGpv4w+tbmDZ2MBOOy4h3OCIiR0UJIgQvv1dOye4azdoqIt2aEkQI5i39gNwBaVx4kmZtFZHuSwmig63bVsUbm3fxuWmjSEnWf14R6b70G6yDNZe2zjpdpa0i0r0pQXSg3fsipa1XTc5VaauIdHtKEB1o4fIiauub9HBaRHqEUBOEmQ0wsyfMbJ2ZvWdm08zs/5pZiZmtCn5mttH2EjNbb2abzOzOaOd0JY1NzkOvb+GMMYM4KVulrSLS/YV9B3Ev8IK7TyCyANB7wf7/dvfJwc/i1o3MLBn4DTADmAjcYGYTQ471mLzy3naKP6zRrK0i0mOEliDMLAM4B3gAwN3r3H13jM2nApvcfbO71wGPAVeGEmgHmbe0kJzMPnxyomZtFZGeIcw7iLFABfB7M1tpZnPNLD04dpuZvWtmD5rZwChtc4GiFtvFwb5DmNlsM1tuZssrKio69AvEasP2apa+v5MbVdoqIj1ImL/NUoApwH3ufiqwF7gTuA84HpgMlAH3RGkbbW5sj3YRd7/f3fPdPT8rK6sj4m63eUsL6Z2SxKzTR8bl+iIiYQgzQRQDxe7+ZrD9BDDF3be7e6O7NwG/I9KdFK1ty4EEw4HSEGM9apX76ln0dglXTs5hULpKW0Wk5wgtQbj7NqDIzMYHu6YDa80su8VpnwIKojRfBowzszFmlgrMAv4UVqzHYuHyImrqG1XaKiI9TkrIn/9V4JHgl/xm4Fbgl2Y2mUiXUSHwJQAzywHmuvtMd28ws9uAJUAy8KC7rwk51nZrbHIeeqOQqaMHMSknM97hiIh0qFAThLuvAvJb7f5cG+eWAjNbbC8GDimB7Ur+sq6col01zJlxUrxDERHpcCq5OQbzlxaSndmHi1TaKiI9kBLEUdq4vZp/btrBjWeqtFVEeib9ZjtK818vJDUliRumqrRVRHomJYijUFlTz5MrSrjyFJW2ikjPpQRxFB5XaauIJAAliHZqnrX19NEDyctVaauI9FxKEO306vpytu7ap7sHEenxlCDaad7SQo7L6MPFk46LdygiIqFSgmiHTeXV/GPjDm48cyS9VNoqIj2cfsu1w/ylW1TaKiIJQwkiRlW19Tz5djGXn5zD4H694x2OiEjolCBi9PjyYvbVNWpJURFJGEoQMWhqch56vZDTRg3kY8NV2ioiiUEJIgavbihny859unsQkYSiBBGDeUu3MCyjN5fkqbRVRBKHEsQRvF+xh79vqODGM0aptFVEEkqoCwaZ2QBgLpBHZAW5zwNXA5cDdcD7wK3uvjtK20KgGmgEGty99cJDneKhpYWkJidxwxkqbRWRxBL2P4nvBV5w9wnAKcB7wEtAnrufDGwA5hym/fnuPjleyaG6tp4nVhRz2SnZDFFpq4gkmNAShJllAOcADwC4e52773b3F929ITjtDWB4WDEcqydWFLNXpa0ikqDCvIMYC1QAvzezlWY218zSW53zeeD5Nto78KKZrTCz2W1dxMxmm9lyM1teUVHRMZETKW2dv7SQKSMHcPLwAR32uSIi3UWYCSIFmALc5+6nAnuBO5sPmtl3gAbgkTban+3uU4AZwFfM7JxoJ7n7/e6e7+75WVlZHRb83zZWULhTs7aKSOIKM0EUA8Xu/maw/QSRhIGZ3QxcBnzW3T1aY3cvDV7LgUXA1BBjPcS81woZ2r83M/KyO/OyIiJdRmgJwt23AUVmNj7YNR1Ya2aXAN8CrnD3fdHamlm6mfVvfg9cBBSEFWtrmyv28LcNFXz2jFGkpqi0VUQSU6hlrsBXgUfMLBXYDNwKLAN6Ay+ZGcAb7v6vZpYDzHX3mcAwYFFwPAX4o7u/EHKsBzz0+hZ6JRufUWmriCSwUBOEu68CWpeontDGuaXAzOD9ZiJlsZ3uQGnryTlk9Vdpq4gkLvWftPLkimL27G9QaauIJDwliBYis7ZuYfKIAZwyYkC8wxERiSsliBb+vrGCzTv2cuvZo+MdiohI3ClBtDB/aSFZKm0VEQGUIA74YMde/rq+gs+eMVKlrSIiKEEc8NDrhSptFRFpIeETxNMrS5h21yv8/rVCUpKSWLppZ7xDEhHpEsIeKNelPb2yhDlPraamvhGAmvpG5jy1GoCrTs2NZ2giInGX0HcQdy9ZfyA5NKupb+TuJevjFJGISNeR0AmidHdNu/aLiCSShE4QOQPS2rVfRCSRJHSCuOPi8aT1Sj5oX1qvZO64eHwbLUREEkdCP6RufhB995L1lO6uIWdAGndcPF4PqEVESPAEAZEkoYQgInKohO5iEhGRtilBiIhIVKEmCDMbYGZPmNk6M3vPzKaZ2SAze8nMNgavA9toe4mZrTezTWZ2Z5hxiojIocK+g7gXeMHdJxBZIe494E7gFXcfB7wSbB/EzJKB3wAzgInADWY2MeRYRUSkhdAShJllAOcADwC4e5277wauBOYHp80HrorSfCqwyd03u3sd8FjQTkREOkmYVUxjgQrg92Z2CrAC+BowzN3LANy9zMyGRmmbCxS12C4Gzoh2ETObDcwONveY2dHOkzEE2HGUbbuanvJdesr3AH2XrqinfA84tu8yqq0DYSaIFGAK8FV3f9PM7iVKd1IbLMo+j3aiu98P3H90Iba4oNlyd88/1s/pCnrKd+kp3wP0XbqinvI9ILzvEuYziGKg2N3fDLafIJIwtptZNkDwWt5G2xEttocDpSHGKiIirYSWINx9G1BkZs3zVkwH1gJ/Am4O9t0MPBOl+TJgnJmNMbNUYFbQTkREOknYI6m/CjwS/JLfDNxKJCktNLMvAFuB6wDMLAeY6+4z3b3BzG4DlgDJwIPuvibkWI+5m6oL6Snfpad8D9B36Yp6yveAkL6LuUft2hcRkQSnkdQiIhKVEoSIiESV8Amip0zpYWYPmlm5mRXEO5ZjZWYjzOyvwfQsa8zsa/GO6WiZWR8ze8vM3gm+yw/iHdOxMLNkM1tpZs/FO5ZjYWaFZrbazFaZ2fJ4x3Msok1p1GGfncjPIIIpPTYAnyRSWrsMuMHd18Y1sKNgZucAe4CH3D0v3vEci6D8Odvd3zaz/kQGWV7VTf+/GJDu7nvMrBfwT+Br7v5GnEM7Kmb2dSAfyHD3y+Idz9Eys0Ig3927/UA5M5sP/MPd5wYFQX2DWSuOWaLfQfSYKT3c/e/ArnjH0RHcvczd3w7eVxOZw6tbLtrhEXuCzV7BT7f8V5mZDQcuBebGOxaJOMyURh0i0RNEtCk9uuUvop7KzEYDpwJvHuHULivolllFZFDoSy0Gj3Y3vwD+D9AU5zg6ggMvmtmKYLqe7qrllEYrzWyumaV31IcneoKIeUoP6Xxm1g94Erjd3aviHc/RcvdGd59MZEaAqWbW7boAzewyoNzdV8Q7lg5ytrtPITJj9FeCLtruqHlKo/vc/VRgL7FPaXREiZ4gNKVHFxX01z8JPOLuT8U7no4Q3Pq/ClwS30iOytnAFUHf/WPABWb2cHxDOnruXhq8lgOLiHQ3d0dtTWnUIRI9QWhKjy4oeLD7APCeu/+/eMdzLMwsy8wGBO/TgAuBdXEN6ii4+xx3H+7uo4n8PfmLu98Y57COipmlB8UPBN0xFwHdsvrvMFMadYiwp9ro0uI0pUcozOxR4DxgiJkVA9939wfiG9VROxv4HLA66LsH+La7L45fSEctG5gfVMwlAQvdvVuXiPYAw4BFkX+HkAL80d1fiG9IxyTalEYdIqHLXEVEpG2J3sUkIiJtUIIQEZGolCBERCQqJQgREYlKCUJERKJSghARkaiUIEREJKr/D2GGbfWwpakYAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(range(number_of_days), measurements)\n",
    "plt.scatter(range(number_of_days), measurements)\n",
    "plt.axhline(midpoint, color='k', linestyle='--')\n",
    "plt.ylabel('Temperature')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Our plotted midpoint seems a little low. Intuitively, our central value should split the measurements more evenly.  The middle array element, which statisticians call the **median**, will split our measurements into exactly equal parts.\n",
    "\n",
    "**Listing 5. 12. Plotting the median temperature**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The median temperature is 77 degrees\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "median = measurements[3]\n",
    "print(f\"The median temperature is {median} degrees\")\n",
    "plt.plot(range(number_of_days), measurements)\n",
    "plt.scatter(range(number_of_days), measurements)\n",
    "plt.axhline(midpoint, color='k', linestyle='--', label='midpoint')\n",
    "plt.axhline(median, color='g', linestyle='-.', label='median')\n",
    "plt.legend()\n",
    "plt.ylabel('Temperature')\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Our median split is not as balanced as it could be. Perhaps we can balance the split by penalizing the median for being too far from the minimum. We'll carry out this penalty using **squared distance**. If we penalize our central value based on its distance to the minimum then the squared distance penalty will grow noticeably larger as it drifts away from 61 degrees.\n",
    "\n",
    "**Listing 5. 13. Penalizing centers using squared distance from minimum**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "def squared_distance(value1, value2):\n",
    "    return (value1 - value2) ** 2\n",
    "\n",
    "possible_centers = range(measurements.min(), measurements.max() + 1)\n",
    "penalties = [squared_distance(center, 61) for center in possible_centers]\n",
    "plt.plot(possible_centers, penalties)\n",
    "plt.scatter(possible_centers, penalties)\n",
    "plt.xlabel('Possible Centers')\n",
    "plt.ylabel('Penalty')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As the plotted centers shift towards the minimum, the penalty will drop, but their distance to the remaining 6 measurements will increase. Thus, we ought to penalize each potential center based on its squared distance to all 7 recorded measurements.\n",
    "\n",
    "**Listing 5. 14. Penalizing centers using total sum of squared distances**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "def sum_of_squared_distances(value, measurements):\n",
    "    return sum(squared_distance(value, m) for m in measurements)\n",
    "\n",
    "penalties = [sum_of_squared_distances(center, measurements) \n",
    "             for center in possible_centers]\n",
    "plt.plot(possible_centers, penalties)\n",
    "plt.scatter(possible_centers, penalties)\n",
    "plt.xlabel('Possible Centers')\n",
    "plt.ylabel('Penalty')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Based on our plot, the temperature of 75 degrees incurs the lowest penalty. We’ll informally\n",
    "refer to this temperature value as our \"least-penalized center\".\n",
    "\n",
    "**Listing 5. 15. Plotting the least-penalized temperature**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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z55Nnz59+NOf/kSPHj2orKxk8uTJbNy4scGOsrfddhu33XYb5eXlTJo0ibvuuovc3Fwee+wxVq5cSUhICE899RT/+7//y+9+9ztuueUWPvvsM0455RSuuuoql885b948du/ezfr16+nUqROHDx+mvLyc2bNn89577xEVFcXChQt58MEHmT9/PuD4y3/NmjUsW7aMRx55hJUrV/LHP/6R1NRUXnjhBQAeeOCBBn8Wq1evZuPGjfTo0eP4/0djCaLGa6szrLTVtA/N+EvfE1asWMGKFSsYNWoUAEVFRWzfvp2JEye6bNk9ZMgQdu3axezZs7nwwguZMmWKW68zc+ZMwNHsr6CggLy8PFasWOGypTjA5MmTCQtzrPh46qmnsmfPHvr06cOiRYuYN28eFRUV7Nu3j/T09AYTRLU77riDSZMmcdFFF7F06VLS09M580xHy52jR48yfvx4tmzZwoABAxg0aBAA1113HfPm1e8ItHLlSm677TY6dXJ83Pbo0YO0tDTS0tI477zzAMdZRnT0T1cuLr/8csDR3jwjI8NljI39LM4777wTTg5gCYJ312fz1Mdb2JdfSlBnf1J2HOLSUbHeDsuYNktVmTNnDrfeeusx2xtq2d29e3e+++47li9fzosvvsiiRYtq/lJuTN0W4SKCqrpsKf7NN98c0468ui347t27mTt3LmvXrqV79+4kJSXVtBFvSHJyMnv27Kn5S11VOe+883jzzTePOW7Dhg1NtjGvHl/3OFVl+PDhrF692uWY6vfSWHvzxn4WISEhTcblDp++lvLu+mzmvL2JffmOX5iS8krmvL2Jd9dnezkyY9qu888/n/nz51NUVARAdnY2Bw4caLBld25uLlVVVVxxxRU8+uijfPvttwB069aNwsLCBl9n4cKFAHz55ZeEhYURFhbWYEvxhhQUFBASEkJYWBj79+/no48+avT4devWMXfuXF5//XX8/Bwfj+PGjeOrr75ix44dABw5coRt27YxdOhQdu/ezc6dOwHqJZBqU6ZM4W9/+1vNB/3hw4cZMmQIBw8erEkQ5eXlbN68udHY6v68mvuzOB4+nSCeXr6VkvLKY7aVlFfy9PKtXorImLZvypQpXHPNNYwfP57TTjuNGTNmUFhY2GDL7uzs7JqbzklJSTzxxBMAJCUlcdtttxEfH3/MOtXVunfvzoQJE7jtttt4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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "least_penalized = 75\n",
    "assert least_penalized == possible_centers[np.argmin(penalties)]\n",
    "\n",
    "plt.plot(range(number_of_days), measurements)\n",
    "plt.scatter(range(number_of_days), measurements)\n",
    "plt.axhline(midpoint, color='k', linestyle='--', label='midpoint')\n",
    "plt.axhline(median, color='g', linestyle='-.', label='median')\n",
    "plt.axhline(least_penalized, color='r', linestyle='-', \n",
    "            label='least penalized center')\n",
    "plt.legend()\n",
    "plt.ylabel('Temperature')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Mathematicians have shown that sum of squared distances error is always minimized by the **average** value of a dataset. Thus, we can compute the least-penalized center directly. We simply need to sum all the elements in\n",
    "`measurements` and then divide that sum by the array size.\n",
    "\n",
    "**Listing 5. 16. Computing the least-penalized center using an average value**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "assert measurements.sum() / measurements.size == least_penalized"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "A summed array of values divided by array size is  referred to as the **mean** or average of the array. We can compute an array's mean using NumPy.\n",
    "\n",
    "**Listing 5. 17. Computing the mean using NumPy**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "mean = measurements.mean()\n",
    "assert mean == least_penalized\n",
    "assert mean == np.mean(measurements)\n",
    "assert mean == np.average(measurements)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The `np.average` method differs from the `np.mean` method because it takes as input an optional `weights` parameter. The `weights` parameter is a list of numeric weights that capture the importance of our the measurements relative to each other.\n",
    "\n",
    "**Listing 5. 18. Passing weights into `np.average`**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "equal_weights = [1] * 7\n",
    "assert mean == np.average(measurements, weights=equal_weights)\n",
    "\n",
    "unequal_weights = [100] + [1] * 6\n",
    "assert mean != np.average(measurements, weights=unequal_weights) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The `weights` parameter is useful for computing the mean across duplicate measurements. Lets find the mean of a 10-temperature array where 75 degrees appears 9 times, and 77 degrees appears just once.\n",
    "\n",
    "**Listing 5. 19. Computing the weighted mean of duplicate values**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The mean is 75.2\n"
     ]
    }
   ],
   "source": [
    "weighted_mean = np.average([75, 77], weights=[9, 1])\n",
    "print(f\"The mean is {weighted_mean}\")\n",
    "assert weighted_mean == np.mean(9 * [75] + [77]) == weighted_mean"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can convert our absolute counts of 9 and 1 into relative weights of 900 and 100, and the final value of `weighted_mean` will remain the same. This is also true if the weights are converted into relative probabilities of\n",
    "0.9 and 0.1.\n",
    "\n",
    "**Listing 5. 20. Computing the weighted mean of relative weights**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "assert weighted_mean == np.average([75, 77], weights=[900, 100])\n",
    "assert weighted_mean == np.average([75, 77], weights=[0.9, 0.1])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can treat probabilities as weights. Consequently, this allows us to compute the mean of\n",
    "any probability distribution.\n",
    "\n",
    "### 5.2.1. Finding the Mean of a Probability Distribution\n",
    "\n",
    "We'll compute the mean of a 20 coin-flip Binomial distribution by passing a `probabilities` array to into the `weights` parameter of `np.average`. \n",
    "\n",
    "**Listing 5. 21. Computing the mean of a Binomial distribution**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The mean of the Binomial is 10.00 heads\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "num_flips = 20\n",
    "interval_all_counts = range(num_flips + 1)\n",
    "probabilities = stats.binom.pmf(interval_all_counts, 20, prob_head)\n",
    "mean_binomial = np.average(interval_all_counts, weights=probabilities)\n",
    "print(f\"The mean of the Binomial is {mean_binomial:.2f} heads\")\n",
    "plt.plot(interval_all_counts, probabilities)\n",
    "plt.axvline(mean_binomial, color='k', linestyle='--')\n",
    "plt.xlabel('Head-count')\n",
    "plt.ylabel('Probability')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The mean perfectly captures the Binomial’s centrality. That is why SciPy permits us to obtain the mean of any Binomial simply by calling `stats.binom.mean`.\n",
    "\n",
    "**Listing 5. 22. Computing the Binomial mean using SciPy**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "assert stats.binom.mean(num_flips, 0.5) == 10"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Using the stats.binom.mean method, we can rigorously analyze the relationship between Binomial centrality and coin-flip count. Let’s plot the Binomial mean across a range of coin-flip counts spanning from 0 to 500.\n",
    "\n",
    "**Listing 5. 23. Plotting multiple Binomial means**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEGCAYAAACKB4k+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAlyElEQVR4nO3dd3yV9dnH8c/FXmHvGfYeSgBxz7pFRFtHHdWKbe3T2qEE0Yqr4m61Wh9c1dZRS4LgVhT3AhSyIBB2IOwVRkLG9fxxjjypBoyQk/uM7/v1yiv3+Z375Fy/Qzjf/M65z3WbuyMiIgJQK+gCREQkeigURERkH4WCiIjso1AQEZF9FAoiIrJPnaALOBStW7f25OTkoMsQEYkp8+bN2+TubSq7LqZDITk5mblz5wZdhohITDGzlfu7Ti8fiYjIPgoFERHZR6EgIiL7KBRERGQfhYKIiOwTsVAwsy5mNtvMFppZtpn9Njw+2czWmNn88NcZFW4z0czyzCzXzE6NVG0iIlK5SB6SWgr8wd2/MrMkYJ6ZvRO+7kF3v6/izmY2ALgQGAh0BGaZWR93L4tgjSIiUkHEVgruXuDuX4W3C4GFQKcD3GQM8KK7F7v7ciAPGBmp+kREYpG78+85q5iVsz4iP79G3lMws2TgMOCL8NCvzSzDzJ4ysxbhsU7A6go3y6eSEDGz8WY218zmbty4MZJli4hElVWbd3PJE18wIS2Tl+evich9RDwUzKwJkAZc5+47gL8DPYFhQAFw/ze7VnLz75wByN2nunuKu6e0aVPpp7RFROJKWbnz5MfLOfUvH5KRv507xw7ioQsPi8h9RbTNhZnVJRQIz7l7OoC7r69w/ePAq+GL+UCXCjfvDKyNZH0iItFu8fpCbpiWwfzV2zixX1vuHDuIDs0aRuz+IhYKZmbAk8BCd3+gwngHdy8IXxwLZIW3ZwLPm9kDhN5o7g18Gan6RESi2d7Scv7+/lL+NnsJSQ3q8tcLh3HO0I6EnlojJ5IrhaOAS4FMM5sfHrsRuMjMhhF6aWgFcA2Au2eb2UtADqEjl67VkUcikogWrN7GhLQMFq0r5JyhHbnl7AG0alK/Ru47YqHg7h9T+fsErx/gNncCd0aqJhGRaLZnbxkPzlrMEx8to21SA564LIWTB7Sr0RpiunW2iEi8+GzpZiamZ7Bi824uGtmViWf0o2mDujVeh0JBRCRAO4pKmPLGIp7/YhXdWjXi+atHcWTP1oHVo1AQEQnIuwvXM2l6FhsKixh/bA9+d3IfGtarHWhNCgURkRq2eWcxt76Sw8wFa+nbLonHLh3OsC7Ngy4LUCiIiNQYd2fmgrXc+koOhUUl/O7kPvzy+J7UqxM9DasVCiIiNaBg+x5ump7Fu4s2MLRLc+4ZN4S+7ZOCLus7FAoiIhFUXu68OGc1d72+kJLycm46sz8/O6o7tWtF9kNoB0uhICISISs27SI1PYPPl23hyJ6tmHLeELq2ahR0WQekUBARqWalZeU89cly7n97MfVq12LKeYP5yYguEW9RUR0UCiIi1WjRuh1MmJbBgvztnNy/HXecO4j2zRoEXVaVKRRERKpBcWkZj8xeyqOz82jWsC4PX3QYZw3pEBOrg4oUCiIih+jrVVuZkJbB4vU7GXtYJ24+awAtG9cLuqyDolAQETlIu/eWcv/bi3nqk+W0b9qAp68YwQn92gZd1iFRKIiIHIRP8zaRmp7Jqi27+ekRXZlwWj+SAmhgV90UCiIiP8D2PSXc9fpCXpyzmu6tG/Pv8UcwqkeroMuqNgoFEZEqejt7HTe9nMWmncVcc1yogV2DusE2sKtuCgURke+xaWcxk2dm82pGAf3aJ/HE5SkM6dw86LIiQqEgIrIf7s7L89dw6ys57C4u4w+n9OEXx/ekbu3oaWBX3RQKIiKVWLttD5OmZzI7dyOHd23O3eOG0Ltd9DWwq24KBRGRCsrLnee+XMWU1xdS7nDL2QO4bHRy1Dawq24KBRGRsGUbd5KalsmXK7ZwdK/W3HXeYLq0jO4GdtVNoSAiCa+0rJwnPl7Og+8spn6dWtxz/hAuGN455lpUVAeFgogktJy1O7ghbQFZa3Zw6sB23D5mEG2bxk4Du+qmUBCRhFRcWsbf3svj7+8vpXmjujx6yeGcPqh9Qq4OKlIoiEjCmbdyCxPSMsnbsJNxh3fm5rP607xRbDawq24KBRFJGLuKS7n3rVye+WwFHZs15JkrR3JcnzZBlxVVFAoikhA+WrKRiemZ5G/dw+Wju3H9af1oUl9Pgd+mR0RE4tr23SXc8VoO/5mXT482jfnPL0YzIrll0GVFLYWCiMStN7PWcfOMLLbs2suvju/Jb07qHXcN7KqbQkFE4s6GwiImz8zm9cx1DOjQlKevGMGgTs2CLismRKyrk5l1MbPZZrbQzLLN7Lfh8ZZm9o6ZLQl/b1HhNhPNLM/Mcs3s1EjVJiLxyd2ZNi+fUx74kFkLN3D9qX2Z8eujFAg/QCRXCqXAH9z9KzNLAuaZ2TvAFcC77j7FzFKBVGCCmQ0ALgQGAh2BWWbWx93LIlijiMSJ/K27uXF6Fh8u3khKtxZMGTeEXm2bBF1WzIlYKLh7AVAQ3i40s4VAJ2AMcHx4t2eA94EJ4fEX3b0YWG5mecBI4LNI1Sgisa+83Pnn5yu5+81FANx6zkAuPaIbtRKkgV11q5H3FMwsGTgM+AJoFw4M3L3AzL45y3Un4PMKN8sPj337Z40HxgN07do1glWLSLRbunEnE6ZlMHflVo7t04Y/jx1E5xaJ1cCuukU8FMysCZAGXOfuOw7wEfLKrvDvDLhPBaYCpKSkfOd6EYl/JWXlTP1wGX99dwkN69bmvguGMu7wTgnfoqI6RDQUzKwuoUB4zt3Tw8PrzaxDeJXQAdgQHs8HulS4eWdgbSTrE5HYk7VmOzdMyyCnYAdnDG7P5HMG0jYpcRvYVbdIHn1kwJPAQnd/oMJVM4HLw9uXAzMqjF9oZvXNrDvQG/gyUvWJSGwpKinj7jcXMeaRT9i4s5jHfno4j14yXIFQzSK5UjgKuBTINLP54bEbgSnAS2Z2FbAKuADA3bPN7CUgh9CRS9fqyCMRAZizYgsTpmWwbNMuLhjemZvOHECzRnWDLisuRfLoo4+p/H0CgJP2c5s7gTsjVZOIxJadxaXc8+Yinv1sJZ1bNOSfV43kmN5qYBdJ+kSziESlDxZv5Mb0TNZu38MVRyZz/al9aawGdhGnR1hEosrWXXu5/bUc0r9aQ882jZn2i9EM76YGdjVFoSAiUcHdeSNrHX+akcW23SX8z4m9uPaEXmpgV8MUCiISuA07irh5RhZvZa9ncKdmPHvlKAZ0bBp0WQlJoSAigXF3/jMvnztezaG4tJzU0/vx86O7U6d2xI6Wl++hUBCRQKzespuJ6Zl8nLeJkcktmTJuMD3aqIFd0BQKIlKjysqdZz9bwT1v5lLL4PZzB3HJyK5qYBclFAoiUmOWrC9kQloGX63axvF923Dn2MF0at4w6LKkAoWCiERcSVk5j72/lIffy6Nx/dr85SfDGDOsoxrYRSGFgohEVGb+dq6ftoBF6wo5a0gHJp8zkNZN6gddluyHQkFEIqKopIwHZy3m8Q+X0bpJfaZeOpwfDWwfdFnyPRQKIlLtvli2mdT0TJZv2sWFI7ow8Yz+NGuoBnaxQKEgItWmsKiEu99cxL8+X0WXlg157uejOKpX66DLkh9AoSAi1WL2og3cOD2T9TuK+PnR3fn9j/rQqJ6eYmKN/sVE5JBs2bWX217J5uX5a+ndtgmP/vJIDuvaIuiy5CApFETkoLg7r2YUMHlmNtv3lPDbk3rzqxN6Ur+OGtjFMoWCiPxg63cUMWl6FrMWrmdI52Y8d/Uo+rVXA7t4oFAQkSpzd/49ZzV3vr6QvaXlTDqjPz87KlkN7OKIQkFEqmTl5l1MTM/k06WbGdW9JXePG0Jy68ZBlyXVTKEgIgdUVu48/cly7ns7l7q1avHnsYO5cEQXNbCLUwoFEdmv3HWF3JCWwYLV2zipX1vuGDuIDs3UwC6eKRRE5Dv2lpbz6Pt5PDI7j6QGdfnrhcM4Z6ga2CUChYKI/JcFq7dxw7QMctcXMmZYR/501gBaqYFdwlAoiAgAe/aW8cA7uTz58XLaJjXgictSOHlAu6DLkhqmUBARPl26iYnpmazcvJuLR3Ul9fR+NG2gBnaJSKEgksB2FJVw1+uLeOHLVXRr1YgXrj6C0T1bBV2WBEihIJKgZuWsZ9LLmWwsLGb8sT343cl9aFhPLSoSnUJBJMFs3lnMra/kMHPBWvq1T2LqpSkM7dI86LIkSigURBKEuzNzwVomz8xmZ3Epvzu5D788vif16qhFhfw/hYJIAijYvoebpmfx7qINDOvSnHvOH0KfdklBlyVRSKEgEsfKy50X5qzirtcXUVbu3HzWAK44MpnaalEh+xGxdaOZPWVmG8wsq8LYZDNbY2bzw19nVLhuopnlmVmumZ0aqbpEEsXyTbu46PHPmTQ9i6FdmvHWdcdy1dHdFQhyQJFcKfwD+Bvw7LfGH3T3+yoOmNkA4EJgINARmGVmfdy9LIL1icSl0rJynvpkOfe/vZh6dWpx97jB/Dili1pUSJVELBTc/UMzS67i7mOAF929GFhuZnnASOCzSNUnEo8WFuxgQloGGfnbOWVAO+44dxDtmjYIuiyJIUG8p/BrM7sMmAv8wd23Ap2Azyvskx8e+w4zGw+MB+jatWuESxWJDcWlZTwyeymPzs6jWcO6/O3iwzhzcAetDuQHq+lj0f4O9ASGAQXA/eHxyn5zvbIf4O5T3T3F3VPatGkTkSJFYslXq7Zy1kMf89C7Szh7aEdm/f44zhqijqZycGp0peDu67/ZNrPHgVfDF/OBLhV27QysrcHSRGLO7r2l3PfWYp7+dDkdmjbg6StGcEK/tkGXJTGuRkPBzDq4e0H44ljgmyOTZgLPm9kDhN5o7g18WZO1icSST/I2kZqeweote7j0iG7ccFpfktTATqpBxELBzF4Ajgdam1k+cAtwvJkNI/TS0ArgGgB3zzazl4AcoBS4VkceiXzX9j0l/Pm1hfx77mq6t27Mv8cfwageamAn1cfcK33pPiakpKT43Llzgy5DpEa8nb2Om17OYvOuvVx9TA+uO7k3DeqqgZ38cGY2z91TKrtOn2gWiXIbC4uZ/Eo2r2UU0L9DU568fASDOzcLuiyJUwoFkSjl7kz/eg23vZrD7uIy/vijPlxzXE/q1lYDO4kchYJIFFqzbQ+Tpmfyfu5GDu8aamDXq60a2EnkKRREokh5ufPcFyuZ8sYiHJh89gAuHa0GdlJzqhwKZnYkkFzxNu7+7b5GInKQlm3cSWpaJl+u2MIxvVvz57GD6dKyUdBlSYKpUiiY2T8JfRJ5PvDNoaLOd5vdicgPVFpWzuMfLefBWYtpUKcW954/hPOHd9YnkiUQVV0ppAADPJaPXxWJQtlrtzMhLYOsNTs4dWA7bh8ziLZqYCcBqmooZAHtCfUrEpFDVFRSxsPvLeGxD5bRolE9/n7J4Zw+uEPQZYlUORRaAzlm9iVQ/M2gu58TkapE4ti8lVu4YVoGSzfuYtzhnbn5rP40b1Qv6LJEgKqHwuRIFiGSCHYVl3LvW7k889kKOjZryDNXjuS4Pur0K9GlSqHg7h9EuhCRePbh4o1MTM9k7fY9XHZEN64/rR9N6uuIcIk+VT366AjgYaA/UA+oDexy96YRrE0k5m3fXcLtr+UwbV4+Pdo05qVrRjMiuWXQZYnsV1X/VPkboXMo/4fQkUiXEWpvLSL78WZWATfPyGbLrr386vie/OYkNbCT6Ffl9au755lZ7XBL66fN7NMI1iUSszYUFnHLjGzeyFrHwI5NefqKEQzqpAZ2EhuqGgq7zaweMN/M7iF0aGrjyJUlEnvcnWnz8rnjtYXsKSnjhtP6cvUxPdTATmJKVUPhUkLnc/418DtCp84cF6miRGLN6i27uXF6Jh8t2cSI5BZMGTeEnm2aBF2WyA9W1aOPVppZQ6CDu98a4ZpEYkZ5ufPsZyu4561cDLhtzEB+OqobtdTATmJUVY8+Ohu4j9CRR93Dp9S8TR9ek0SWt2EnqWkZzF25lWP7tOHPYwfRuYUa2Els+yEfXhsJvA/g7vPNLDkyJYlEt5KycqZ+uIy/zlpCw3q1uf+CoZx3eCc1sJO4UNVQKHX37fqll0SXtWY7N0zLIKdgB2cO7sDkcwbSJql+0GWJVJsqN8Qzs4uB2mbWG/gNoENSJWEUlZTx13eXMPXDZbRsXI/Hfjqc0wa1D7oskWpX1VD4H2ASoWZ4LwBvAbdHqiiRaDJnxRYmTMtg2aZd/DilM5POGECzRnWDLkskIqp69NFuQqEwKbLliESPncWl3PPmIp79bCWdWzTkX1eN4ujerYMuSySiDhgKZjbzQNfr6COJV7NzNzApPZOCHUX87Khk/vijvjRWAztJAN/3Wz4aWE3oJaMvAL3TLHFt66693P5qDulfr6FX2yZM+8WRDO/WIuiyRGrM94VCe+AU4CLgYuA14AV3z450YSI1yd15PXMdt8zMYtvuEn5zYi+uPbEX9euogZ0klgOGQrj53ZvAm2ZWn1A4vG9mt7n7wzVRoEikbdhRxE0vZ/F2znoGd2rGs1eOYkBHdYWXxPS9L5KGw+BMQoGQDDwEpEe2LJHIc3f+Mzef21/LYW9pORNP78dVR3enjhrYSQL7vjeanwEGAW8At7p7Vo1UJRJhqzaHGth9nLeJkd1bMuW8wfRQAzuR710pXArsAvoAv6nwiWYDXGdek1hTVu7849MV3PdWLrVrGXecO4iLR3ZVAzuRsO97T0HraIkbS9YXckNaBl+v2sYJfdtw59jBdGzeMOiyRKJKxJ70zewpM9tgZlkVxlqa2TtmtiT8vUWF6yaaWZ6Z5ZrZqZGqSxLP3tJyHnp3CWc+9DErNu3iLz8ZxlNXjFAgiFQikiuBfwCnfWssFXjX3XsD74YvY2YDCJ0DemD4No+amY4FlEOWkb+Nc/72MQ+8s5hTB7Xnnd8fx7mHqaOpyP5E7COa7v5hJe21xwDHh7efIdSKe0J4/EV3LwaWm1keoVbdn0WqPolvRSVlPPjOYh7/aBltkurz+GUpnDKgXdBliUS9mv7cfjt3LwBw9wIzaxse7wR8XmG//PDYd5jZeGA8QNeuXSNYqsSqz5dtJjUtgxWbd3PRyC6knt6fZg3VwE6kKqKlmUtla3mvbEd3nwpMBUhJSal0H0lMhUUlTHljEc99sYquLRvx/M9HcWQvNbAT+SFqOhTWm1mH8CqhA7AhPJ4PdKmwX2dgbQ3XJjHsvUXrmTQ9i/U7ivj50d35/Y/60KhetPzNIxI7avqQ05nA5eHty4EZFcYvNLP6ZtYd6A18WcO1SQzasmsv1734NVf+Yy5JDeqQ9ssjuemsAQoEkYMUsf85ZvYCoTeVW5tZPnALMAV4ycyuAlYBFwC4e7aZvQTkAKXAteG+SyKVcndeyShg8sxsCotK+O1Jvbn2hF7Uq6OP1ogcikgefXTRfq46aT/73wncGal6JH6s2x5qYDdr4XqGdm7G3eePol97fbhepDpojS0xw915cc5q/vzaQkrKy5l0Rn+uPLo7tdWiQqTaKBQkJqzcvIvUtEw+W7aZI3q0ZMp5Q0hu3TjoskTijkJBolpZufP0J8u57+1c6taqxV3nDeYnKV3UwE4kQhQKErVy14Ua2C1YvY2T+7fljnMH075Zg6DLEolrCgWJOntLy3n0/TwemZ1HUoO6PHTRYZw9pIP6FYnUAIWCRJX5q7cxYVoGuesLGTOsI7ecPZCWjesFXZZIwlAoSFTYs7eM+9/O5alPltM2qQFPXp7CSf3VwE6kpikUJHCfLt1Ealomq7bs5uJRXUk9vR9NG6iBnUgQFAoSmB1FJdz1+kJe+HI1ya0a8cLVRzC6Z6ugyxJJaAoFCcSsnPVMejmTjYXFXHNsD647uQ8N6+m8SiJBUyhIjdq8s5jJr+TwyoK19GufxOOXpTCkc/OgyxKRMIWC1Ah3Z8b8tdz6SjY7i0v5/Sl9+MVxPdXATiTKKBQk4tZu28NNL2fx3qINDOvSnHvOH0KfdklBlyUilVAoSMSUlzvPf7mKKW8soqzcufmsAVxxZLIa2IlEMYWCRMTyTbtITcvgi+VbOKpXK+4aO4SurRoFXZaIfA+FglSr0rJynvx4OQ+8s5h6dWpxz7ghXJDSWS0qRGKEQkGqTc7aHUxIyyBzzXZOGdCOO84dRLumamAnEksUCnLIikvL+Nt7efz9/aU0b1SXRy4+nDMGt9fqQCQGKRTkkMxbuZUJaRnkbdjJeYd14uazBtBCDexEYpZCQQ7K7r2l3PtWLv/4dAUdmjbg6Z+N4IS+bYMuS0QOkUJBfrCPl2wiNT2D/K17uGx0N244rR9N6utXSSQe6H+yVNn2PSXc+VoOL83Np3vrxrx0zWhGdm8ZdFkiUo0UClIlb2Wv4+aXs9i8ay+/PL4nvz2pNw3qqoGdSLxRKMgBbSwsZvLMbF7LLKB/h6Y8efkIBnduFnRZIhIhCgWplLuT/tUabns1hz17y7j+1L6MP7YHdWurgZ1IPFMoyHes2baHG9Mz+WDxRoZ3a8Hd4wbTq60a2IkkAoWC7FNe7vzri5Xc/cYiHJh89gAuG51MLTWwE0kYCgUBYOnGnaSmZTBnxVaO6d2aP48dTJeWamAnkmgUCgmupKycxz9axl9mLaFBnVrce/4Qzh+uBnYiiUqhkMCy1mxnQloG2Wt3cNrA9tx27kDaJqmBnUgiCyQUzGwFUAiUAaXunmJmLYF/A8nACuDH7r41iPriXVFJGQ+/t4THPlhGi0b1+Pslh3P64A5BlyUiUSDIlcIJ7r6pwuVU4F13n2JmqeHLE4IpLX7NXbGFG9IyWLZxF+cP78xNZ/aneSM1sBORkGh6+WgMcHx4+xngfRQK1WZXcaiB3TOfraBjs4Y8e+VIju3TJuiyRCTKBBUKDrxtZg78r7tPBdq5ewGAuxeYWaUtN81sPDAeoGvXrjVVb0z7YPFGbkzPZO32PVw+OpnrT+1LYzWwE5FKBPXMcJS7rw0/8b9jZouqesNwgEwFSElJ8UgVGA+27d7L7a8uJO2rfHq0acx/rhlNSrIa2InI/gUSCu6+Nvx9g5lNB0YC682sQ3iV0AHYEERt8eKNzAJunpHN1t17ufaEnvzPiWpgJyLfr8ZDwcwaA7XcvTC8/SPgNmAmcDkwJfx9Rk3XFg827CjiTzOyeTN7HQM7NuWZK0cwsKMa2IlI1QSxUmgHTA9/OKoO8Ly7v2lmc4CXzOwqYBVwQQC1xSx3Z9q8fG5/NYei0nImnNaPq4/pTh01sBORH6DGQ8HdlwFDKxnfDJxU0/XEg9VbdnPj9Ew+WrKJEcktmDJuCD3bNAm6LBGJQToEJYaVlTvPfraCe9/KxYDbxwzkklHd1MBORA6aQiFG5W0oZEJaJvNWbuW4Pm24c+wgOrdQAzsROTQKhRhTUlbO/36wlIfezaNR/do88OOhjD2skxrYiUi1UCjEkKw127l+WgYLC3Zw5pAOTD57IG2S6gddlojEEYVCDCgqKeMvs5bw+EfLaNm4Hv976XBOHdg+6LJEJA4pFKLcl8u3kJqWwbJNu/hJShduPKM/zRrVDbosEYlTCoUoVVhUwj1v5vLPz1fSuUVD/nXVKI7u3TroskQkzikUotDs3A1MSs+kYEcRVx7VnT+e2odG9fRPJSKRp2eaKLJ1115ufzWH9K/X0KttE6b94kiGd2sRdFkikkAUClHA3Xkts4BbZmSzfU8JvzmxF9ee2Iv6ddTATkRqlkIhYOt3FHHzy1m8nbOewZ2a8a+fj6J/h6ZBlyUiCUqhEBB356W5q7njtYXsLS1n4un9uOpoNbATkWApFAKwavNuUtMz+HTpZkZ2b8nd44bQvXXjoMsSEVEo1KSycucfn67gvrdyqV3LuOPcQVw8sqsa2IlI1FAo1JDF6wu5YVoG81dv44S+bbhz7GA6Nm8YdFkiIv9FoRBhe0vLeeyDpTz83hKa1K/DXy8cxjlDO6qBnYhEJYVCBC1YvY0JaRksWlfI2UM7MvnsAbRqogZ2IhK9FAoRsGdvGQ/OWswTHy2jTVJ9Hr8shVMGtAu6LBGR76VQqGafLd3MxPQMVmzezUUjuzDxjP40baAGdiISGxQK1WRHUQlT3ljE81+somvLRjz/81Ec2UsN7EQktigUqsF7i9ZzY3oWGwqLuPqY7vz+lL40rKcWFSISexQKh2DzzmJuezWHGfPX0rddEo9dOpxhXZoHXZaIyEFTKBwEd2fmgrXc+koOhUUlXHdyb351fC/q1VGLChGJbQqFH6hg+x5ump7Fu4s2MLRLc+4ZN4S+7ZOCLktEpFooFKqovNx5cc5q7np9ISXl5dx0Zn9+dlR3aqtFhYjEEYVCFazYtIvU9Aw+X7aF0T1aMWXcYLq1UgM7EYk/CoUDKCt3nvp4Ofe/k0vdWrW467zBXDiii1pUiEjcUijsx6J1O5gwLYMF+ds5uX9b7jh3MO2bNQi6LBGRiFIofEtxaRmPzF7Ko7PzaNawLg9fdBhnDemg1YGIJASFQgVfr9rKhLQMFq/fybnDOvKnswfSsnG9oMsSEakxCgVg995S7n97MU99spz2TRvw1BUpnNhPDexEJPFEXSiY2WnAX4HawBPuPiWS9/dp3iZS0zNZtWU3l4zqSurp/UhSAzsRSVBRFQpmVht4BDgFyAfmmNlMd8+p7vvavqeEu15fyItzVpPcqhEvjj+CI3q0qu67ERGJKVEVCsBIIM/dlwGY2YvAGKBaQyEjfxtXPzuXjYXFXHNcD353ch8a1FUDOxGRaAuFTsDqCpfzgVEVdzCz8cB4gK5dux7UnXRt2Yg+7ZJ4/LIUhnRufnCViojEoWgLhcqO+/T/uuA+FZgKkJKS4pXs/72aN6rHP68a9f07iogkmGhr65kPdKlwuTOwNqBaREQSTrSFwhygt5l1N7N6wIXAzIBrEhFJGFH18pG7l5rZr4G3CB2S+pS7ZwdclohIwoiqUABw99eB14OuQ0QkEUXby0ciIhIghYKIiOyjUBARkX0UCiIiso+5H9Tnv6KCmW0EVh7Cj2gNbKqmcmKF5pwYNOfEcLBz7ububSq7IqZD4VCZ2Vx3Twm6jpqkOScGzTkxRGLOevlIRET2USiIiMg+iR4KU4MuIACac2LQnBNDtc85od9TEBGR/5boKwUREalAoSAiIvskZCiY2WlmlmtmeWaWGnQ91cXMnjKzDWaWVWGspZm9Y2ZLwt9bVLhuYvgxyDWzU4Op+tCYWRczm21mC80s28x+Gx6P23mbWQMz+9LMFoTnfGt4PG7nDKFzuJvZ12b2avhyXM8XwMxWmFmmmc03s7nhscjO290T6otQS+6lQA+gHrAAGBB0XdU0t2OBw4GsCmP3AKnh7VTg7vD2gPDc6wPdw49J7aDncBBz7gAcHt5OAhaH5xa38yZ0hsIm4e26wBfAEfE85/A8fg88D7wavhzX8w3PZQXQ+ltjEZ13Iq4URgJ57r7M3fcCLwJjAq6pWrj7h8CWbw2PAZ4Jbz8DnFth/EV3L3b35UAeoccmprh7gbt/Fd4uBBYSOtd33M7bQ3aGL9YNfzlxPGcz6wycCTxRYThu5/s9IjrvRAyFTsDqCpfzw2Pxqp27F0DoCRRoGx6Pu8fBzJKBwwj95RzX8w6/lDIf2AC84+7xPue/ADcA5RXG4nm+33DgbTObZ2bjw2MRnXfUnWSnBlglY4l4XG5cPQ5m1gRIA65z9x1mlU0vtGslYzE3b3cvA4aZWXNgupkNOsDuMT1nMzsL2ODu88zs+KrcpJKxmJnvtxzl7mvNrC3wjpktOsC+1TLvRFwp5ANdKlzuDKwNqJaasN7MOgCEv28Ij8fN42BmdQkFwnPunh4ejvt5A7j7NuB94DTid85HAeeY2QpCL/eeaGb/In7nu4+7rw1/3wBMJ/RyUETnnYihMAfobWbdzawecCEwM+CaImkmcHl4+3JgRoXxC82svpl1B3oDXwZQ3yGx0JLgSWChuz9Q4aq4nbeZtQmvEDCzhsDJwCLidM7uPtHdO7t7MqH/r++5+0+J0/l+w8wam1nSN9vAj4AsIj3voN9dD+gd/TMIHaWyFJgUdD3VOK8XgAKghNBfDVcBrYB3gSXh7y0r7D8p/BjkAqcHXf9BzvloQkvkDGB++OuMeJ43MAT4OjznLOBP4fG4nXOFeRzP/x99FNfzJXSE5ILwV/Y3z1WRnrfaXIiIyD6J+PKRiIjsh0JBRET2USiIiMg+CgUREdlHoSAiIvsoFCShmVl7M3vRzJaaWY6ZvW5mfQ6wf0czm/YD7+P9cNfK+eGv88PjOw/2Z4pEig5JlYQV/uDbp8Az7v5YeGwYkOTuH1Xj/bwP/NHd535rfKe7N6mu+xGpDlopSCI7ASj5JhAA3H2+u39kIfeaWVa4n/1PINR0z8LnqzCzK8ws3czeDPe2v+dgiqjkZ84I/8xcM7slPN7YzF6z0DkUsr6pR6S6JWJDPJFvDALm7ee684BhwFCgNTDHzD6sZL9hhDqzFgO5Zvawu6+uZL/nzGxPePskd998gLpGhmvbHb7f14BuwFp3PxPAzJodaGIiB0srBZHKHQ284O5l7r4e+AAYUcl+77r7dncvAnIIPXlX5hJ3Hxb+OlAgQKgV9mZ33wOkh2vJBE42s7vN7Bh3335w0xI5MIWCJLJsYPh+rttv7+1vKa6wXUb1rL6//Uafu/tiQrVmAneZ2Z+q4X5EvkOhIInsPaC+mV39zYCZjTCz44APgZ+ET2bThtCpTmuq0+Yp4fPwNiR0Vq1PzKwjsNvd/wXcR+i0qyLVTu8pSMJydzezscBfzCwVKCJ0TtzrCIXCaEIdKh24wd3Xhc/uFmkfA/8EegHPu/vc8EnY7zWzckJdcH9ZA3VIAtIhqSJRxMyuAFLc/ddB1yKJSS8fiYjIPlopiIjIPlopiIjIPgoFERHZR6EgIiL7KBRERGQfhYKIiOzzf5fn7W6HoozWAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "means = [stats.binom.mean(num_flips, 0.5) for num_flips in range(500)]\n",
    "plt.plot(range(500), means)\n",
    "plt.xlabel('Coin Flips')\n",
    "plt.ylabel('Mean')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "With this in mind, let's consider the mean of the single coin-flip Binomial distribution (which is commonly called the **Bernoulli** distribution). The Bernoulli distribution has a coin-flip count of 1, so its mean is equal to 0.5\n",
    "\n",
    "**Listing 5. 24. Predicting the mean of a Bernoulli distribution**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_flips = 1\n",
    "assert stats.binom.mean(num_flips, 0.5) == 0.5"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can leverage the observed linear relationship to predict the mean of a 1000 coin-flip distribution. We expect that mean to equal 500, and for it to be positioned in the distribution’s center.\n",
    "\n",
    "**Listing 5. 25. Predicting the mean of a 1000 coin-flip distribution**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "num_flips = 1000\n",
    "assert stats.binom.mean(num_flips, 0.5) == 500\n",
    "\n",
    "interval_all_counts = range(num_flips)\n",
    "probabilities = stats.binom.pmf(interval_all_counts, num_flips, 0.5)\n",
    "plt.axvline(500, color='k', linestyle='--')\n",
    "plt.plot(interval_all_counts, probabilities)\n",
    "plt.xlabel('Head-count')\n",
    "plt.ylabel('Probability')\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "A distribution’s mean serves as an excellent measure of centrality. Let’s now explore the use of variance as a measure of dispersion.\n",
    "## 5.3. Variance as a Measure of Dispersion\n",
    "\n",
    "Consider a scenario where we measure the summer temperatures in California and Kentucky. We’ll store these hypothetical temperature measurements, and then compute their means.\n",
    "\n",
    "**Listing 5. 26. Measuring the means of multiple temperature arrays**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Mean California temperature is 75.0\n",
      "Mean Kentucky temperatures is 75.0\n"
     ]
    }
   ],
   "source": [
    "california = np.array([52, 77, 96])\n",
    "kentucky = np.array([71, 75, 79])\n",
    "\n",
    "print(f\"Mean California temperature is {california.mean()}\")\n",
    "print(f\"Mean Kentucky temperatures is {california.mean()}\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The means of the 2 measurement arrays both equal 75.  Despite this, the 2 measurement arrays are far from equal. The California temperatures are much more dispersed and unpredictable.  We'll visualize this difference in dispersion by plotting the 2 measurement arrays.\n",
    "\n",
    "**Listing 5. 27. Visualizing the difference in dispersion**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(range(3), california, color='b', label='California')\n",
    "plt.scatter(range(3), california, color='b')\n",
    "plt.plot(range(3), kentucky, color='r', linestyle='-.', label='Kentucky')\n",
    "plt.scatter(range(3), kentucky, color='r')\n",
    "plt.axhline(75, color='k', linestyle='--', label='Mean')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Within the plot, the 3 Kentucky temperatures nearly overlap with the flat mean. Meanwhile, the majority of California temperatures are noticeably more distant from the mean. Let's penalize the California measurements for being\n",
    "too distant from their center, using a **sum of squares** penalty.\n",
    "\n",
    "**Listing 5. 28. Computing California’s sum of squares**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "California's sum of squares is 974.0\n"
     ]
    }
   ],
   "source": [
    "def sum_of_squares(data):\n",
    "    mean = np.mean(data)\n",
    "    return sum(squared_distance(value, mean) for value in data)\n",
    "\n",
    "california_sum_squares = sum_of_squares(california)\n",
    "print(f\"California's sum of squares is {california_sum_squares}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "California’s sum of squares is 974. We expect Kentucky’s sum of squares to be noticeably lower.\n",
    "\n",
    "**Listing 5. 29. Computing Kentucky’s sum of squares**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Kentucky's sum of squares is 32.0\n"
     ]
    }
   ],
   "source": [
    "kentucky_sum_squares = sum_of_squares(kentucky)\n",
    "print(f\"Kentucky's sum of squares is {kentucky_sum_squares}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The sum of squares helps us measure dispersion. However, the\n",
    "measurement is not perfect. Suppose we duplicate the temperatures within the\n",
    "California array by recording each temperature twice. The level of dispersion will remain the same even though the sum of squares will double.\n",
    "\n",
    "**Listing 5. 30. Computing sum of squares after array duplication**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Duplicated California sum of squares is 1948.0\n"
     ]
    }
   ],
   "source": [
    "california_duplicated = np.array(california.tolist() * 2)\n",
    "duplicated_sum_squares = sum_of_squares(california_duplicated)\n",
    "print(f\"Duplicated California sum of squares is {duplicated_sum_squares}\")\n",
    "assert duplicated_sum_squares == 2 * california_sum_squares"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The sum of squares is not a good measure of dispersion because it’s influenced by the size of an inputted array. Fortunately, that influence is easy to eliminate. We simply divide the sum of squares by the array size.\n",
    "\n",
    "**Listing 5. 31. Dividing sum of squares by array size**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "value1 = california_sum_squares / california.size\n",
    "value2 = duplicated_sum_squares / california_duplicated.size\n",
    "assert value1 == value2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Dividing sum of squares by the number of measurements produces what statisticians call the **variance**. Conceptually, the variance is equal to the average squared distance from the mean.\n",
    "\n",
    "**Listing 5. 32. Computing the variance from mean squared distance**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "def variance(data):\n",
    "    mean = np.mean(data)\n",
    "    return np.mean([squared_distance(value, mean) for value in data])\n",
    "\n",
    "assert variance(california) == california_sum_squares / california.size"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The variances for the california and california_duplicated arrays will equal, since their levels of dispersion are identical.\n",
    "\n",
    "**Listing 5. 33. Computing the variance after array duplication**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "assert variance(california) == variance(california_duplicated)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Meanwhile, the variances for the California and Kentucky arrays will retain their 30-fold ratio caused by a difference in dispersion.\n",
    "\n",
    "**Listing 5. 34. Comparing the variances of California and Kentucky**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "California Variance is 324.6666666666667\n",
      "Kentucky Variance is 10.666666666666666\n"
     ]
    }
   ],
   "source": [
    "california_variance = variance(california)\n",
    "kentucky_variance = variance(kentucky)\n",
    "print(f\"California Variance is {california_variance}\")\n",
    "print(f\"Kentucky Variance is {kentucky_variance}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Variance can be computed by calling `np.var` on a Python list or NumPy array. The variance of a NumPy array can also be computed using the array’s built-in `var` method.\n",
    "\n",
    "**Listing 5. 35. Computing the variance using NumPy**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "assert california_variance == california.var()\n",
    "assert california_variance == np.var(california)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Variance is dependent on the mean. If we compute a weighted mean, then we must also compute a weighted variance. The weighted variance is simply the weighted average of all the squared distances from the weighted mean. \n",
    "\n",
    "**Listing 5. 36. Computing the weighted variance using np.average**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [],
   "source": [
    "def weighted_variance(data, weights):\n",
    "    mean = np.average(data, weights=weights)\n",
    "    squared_distances = [squared_distance(value, mean) for value in data]\n",
    "    return np.average(squared_distances, weights=weights)\n",
    "\n",
    "assert weighted_variance([75, 77], [9, 1]) == np.var(9 * [75] + [77]) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The `weighted_variance` function can take as its input an array of probabilities. This allows us to compute the variance of any probability distribution.\n",
    "\n",
    "### 5.3.1. Finding the Variance of a Probability Distribution**\n",
    "\n",
    "Lets compute variance of the Binomial distribution associated with 20 fair coin-flips. We’ll run the computation by assigning a `probabilities array` to the `weights` parameter of `weighted_variance.`\n",
    "\n",
    "**Listing 5. 37. Computing the variance of a Binomial distribution**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The variance of the Binomial is 5.00 heads\n"
     ]
    }
   ],
   "source": [
    "interval_all_counts = range(21)\n",
    "probabilities = stats.binom.pmf(interval_all_counts, 20, prob_head)\n",
    "variance_binomial = weighted_variance(interval_all_counts, probabilities)\n",
    "print(f\"The variance of the Binomial is {variance_binomial:.2f} heads\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The Binomial’s variance is 5, which is equal to half the Binomial’s mean. That variance can be computed more directly using SciPy’s `stats.binom.var` method.\n",
    "\n",
    "**Listing 5. 38. Computing the Binomial variance using SciPy**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "assert stats.binom.var(20, prob_head) == 5.0\n",
    "assert stats.binom.var(20, prob_head) == stats.binom.mean(20, prob_head) / 2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Using the `stats.binom.var` method, we can rigorously analyze the relationship between Binomial dispersion and coin-flip count. Let's plot the Binomial variance across a range of coin-flip counts spanning from 0 to 500. \n",
    "\n",
    "**Listing 5. 39. Plotting multiple Binomial variances**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "variances = [stats.binom.var(num_flips, prob_head) \n",
    "             for num_flips in range(500)]\n",
    "plt.plot(range(500), variances)\n",
    "plt.xlabel('Coin Flips')\n",
    "plt.ylabel('Variance')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The variance is equal to one-fourth the coin-flip count. Thus, the Bernoulli distribution has a\n",
    "variance of 0.25, because its coin-flip count is 1. By this logic, we can expect a variance of 250 for a 1000 coin-flip distribution.\n",
    "\n",
    "**Listing 5. 40. Predicting Binomial variances**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [],
   "source": [
    "assert stats.binom.var(1, 0.5) == 0.25\n",
    "assert stats.binom.var(1000, 0.5) == 250"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The variance is powerful measure of data dispersion. However, statisticians often use an alternative measure, which they call the **standard deviation**. The standard deviation is equal to the square-root of the variance.\n",
    "\n",
    "**Listing 5. 41. Computing the standard deviation**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = [1, 2, 3]\n",
    "standard_deviation = np.std(data)\n",
    "assert standard_deviation ** 2 == np.var(data)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 6. Making Predictions Using the Central Limit Theorem and SciPy\n",
    "\n",
    "## 6.1. Manipulating the Normal Distribution Using SciPy\n",
    "\n",
    "Let's generate a Normal distribution by plotting a histogram of coin-flip samples. Each sample will represent 10,000 flipped coins. If we use the sample size to divide the sum of values in the sample, we will compute the observed head-count frequency. Conceptually, this frequency is equal to simply taking the sample's mean.\n",
    "\n",
    "**Listing 6. 1. Computing head-count frequencies**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.random.seed(0)\n",
    "sample_size = 10000\n",
    "sample = np.array([np.random.binomial(1, 0.5) for _ in range(sample_size)])\n",
    "head_count = sample.sum()\n",
    "head_count_frequency = head_count / sample_size\n",
    "assert head_count_frequency == sample.mean()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can compute 100,000 head-count frequencies in just a single line of code.\n",
    "\n",
    "**Listing 6.2. Computing 100,000 head-count frequencies**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.random.seed(0)\n",
    "frequencies = np.random.binomial(sample_size, 0.5, 100000) / sample_size"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Each sampled frequency equals the mean of 10,000 randomly flipped coins. Therefore, we’ll rename our frequencies variable as `sample_means`. We’ll then proceed to visualize our `sample_means` data as a histogram.\n",
    "\n",
    "**Listing 6. 3. Visualizing sample means in a histogram**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sample_means = frequencies\n",
    "likelihoods, bin_edges, _ = plt.hist(sample_means, bins='auto', \n",
    "                                     edgecolor='black', density=True)\n",
    "plt.xlabel('Binned Sample Mean')\n",
    "plt.ylabel('Relative Likelihood')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The histogram is shaped like a Normal distribution. Let’s calculate the distribution’s mean\n",
    "and standard deviation.\n",
    "\n",
    "**Listing 6. 4. Computing mean and standard deviation of a histogram**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Mean is approximately 0.50\n",
      "Standard deviation is approximately 0.005\n"
     ]
    }
   ],
   "source": [
    "mean_normal = np.average(bin_edges[:-1], weights=likelihoods)\n",
    "var_normal = weighted_variance(bin_edges[:-1], likelihoods)\n",
    "std_normal = var_normal ** 0.5\n",
    "print(f\"Mean is approximately {mean_normal:.2f}\")\n",
    "print(f\"Standard deviation is approximately {std_normal:.3f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The distribution’s mean is approximately 0.5, and its standard deviation is approximately 0.005. In a Normal distribution, these values can be computed directly from the distribution’s peak.\n",
    "\n",
    "**Listing 6. 5. Computing mean and standard deviation from peak coordinates**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Mean is approximately 0.50\n",
      "Standard deviation is approximately 0.005\n"
     ]
    }
   ],
   "source": [
    "import math\n",
    "peak_x_value = bin_edges[likelihoods.argmax()]\n",
    "print(f\"Mean is approximately {peak_x_value:.2f}\")\n",
    "peak_y_value = likelihoods.max()\n",
    "std_from_peak = (peak_y_value * (2* math.pi) ** 0.5) ** -1\n",
    "print(f\"Standard deviation is approximately {std_from_peak:.3f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Additionally, we can compute the mean and standard deviation simply by calling `stats.norm.fit(sample_means)`.\n",
    "\n",
    "**Listing 6. 6. Computing mean and standard deviation using `stats.norm.fit`**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Mean is approximately 0.50\n",
      "Standard deviation is approximately  0.005\n"
     ]
    }
   ],
   "source": [
    "fitted_mean, fitted_std = stats.norm.fit(sample_means)\n",
    "print(f\"Mean is approximately {fitted_mean:.2f}\")\n",
    "print(f\"Standard deviation is approximately  {fitted_std:.3f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The computed mean and standard deviation can be used to reproduce our Normal curve. We can regenerate the curve calling `stats.norm.pdf(bin_edges, fitted_mean, fitted_std)`.\n",
    "\n",
    "**Listing 6. 7. Computing Normal likelihoods using `stats.norm.pdf`**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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et9xB7v37z9r/bQGDbjqqqtcSlV0devWJSUlhbS0NLejmDycnoHLW768gKsXsEVV0wBEZAbQCdgjIrWds/3awN68NlbV8cB48PTq8WFOY0ouVzONqiIiNKlXj+5t23JD3760adaMSlFRrNuyhbaDBwPw5iefUCcujr4l6HfuD+Hh4V7P7mTKPl+28W8HOohIlHi+G14KrANmAcOc1wwDZvowgzF+t2L9err++c/sP3SIihUqMPkf/6Bf587UrlGDmKgo2l100ZmrRN/85BMG/PWvvDp1qtuxTRDxWeFX1aXANGA5sMp5r/HAM8BlIrIRuMxZNqZc2Jaayh/uvputqansO3SowNeGhYWx4I036N+5M3c++ywflOHx2035YhdwGVMakpM5dPQoibfcws69e1n89ttc1LBh/q8/fcFWcjLpGRlcfuedLFm1innz59OlSxf/ZDblnisXcBlT7jndMFWVkWPHsmHbNmY891zBRT+XihUqMOO552hYty6LFy8+a7/G+IKNzmlMKTjy669s2L6dJ/7yF3q2a1fk7atVrsyKDz+kQocOPkhnzNms8BtTCirHxPDjpEmElKCPe4XwcAAWLFjAkeXLGZjHZCfGlAZr6jGmhN797DMOHD5MhfBwwsJKdi6lqjz88MPc8n//x6ESTrZhTH6s8BtTAt//738Me/xxXv3441LZnyxfzn9uv50DR44wdsKEUtmnMblZ4TemmLKzs7n3X//i3Lg47nWm/SsNrZs1Y3j//rw0eTK//PJLqe3XmNOs8BtTFDl620yZMoUf16zh6TvuICYqqlTfZuwdd1AhPJwHH3ywVPdrDNiPu8YUy6lTp3jyySdp0bAhN/TtW+r7r12jBv+44w4477wzwz8YU1qs8BtTDEeOHKF58+Zc1749ISG++eJ897XXlvmZuUxgssJvTDFU3byZ6X//u8/fJyMjg/fee4/ExESaNWvm8/czwcHa+I0pouU//8zPW7f65b2OHDnCqFGjGDt2rF/ezwQHK/zGFNE9L7xAv1GjyM7O9vl71ahRg5EjR/LR5MnstEHcTCmxwm9MESSvW8d3P/3EnVdf7bO2/dzuuususlV5rZSuFTDGCr8xRfDS5MnEREUxYuBAv71ngwYNuKJrV96YMYMTJ0747X1N+WU/7hrjjeRkUvft46O5c7n1qquoHBPjt/cFTw+f7bt3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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "normal_likelihoods = stats.norm.pdf(bin_edges, fitted_mean, fitted_std)\n",
    "plt.plot(bin_edges, normal_likelihoods, color='k', linestyle='--', \n",
    "         label='Normal Curve')\n",
    "plt.hist(sample_means, bins='auto', alpha=0.2, color='r', density=True)\n",
    "plt.legend()\n",
    "plt.xlabel('Sample Mean')\n",
    "plt.ylabel('Relative Likelihood')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The plotted curve's peak sits at an x-axis position of 0.5, and rises to a y-axis position of approximately 80. Lets shift the peak 0.01 units to the right, while also doubling the peak's height. \n",
    "\n",
    "**Listing 6. 8. Manipulating a Normal curve’s peak coordinates**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "adjusted_likelihoods = stats.norm.pdf(bin_edges, fitted_mean + 0.01, \n",
    "                                      fitted_std / 2)\n",
    "plt.plot(bin_edges, adjusted_likelihoods, color='k', linestyle='--')\n",
    "plt.hist(sample_means, bins='auto', alpha=0.2, color='r', density=True)\n",
    "plt.xlabel('Sample Mean')\n",
    "plt.ylabel('Relative Likelihood')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 6.1.1. Comparing Two Sampled Normal Curves\n",
    "\n",
    "Let's quadruple the coin-flip sample size to 40,000 and plot the resulting distribution changes. Below, we compare the plotted shapes of the old and updated Normal distributions, which we'll label as A and B, respectively. \n",
    "\n",
    "**Listing 6. 9. Plotting two curves with different samples sizes**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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vs5ZwPn07evc9Ww1kYw/WVIwxk/WrIHkZOjV6/zbAvTu7Tx//bXvYjLmbJYUjPET94CWzp092z46GipX/vN9xviDJQVj/GTlSuduZU/rOAYHw6WXWlIw/mVJwRg/UHU+3D09S3Dr3Bl++82Zc6E4CQ4OJiYmhtatW9OmTZscx/2f7ZNPPuGSSy6hdevWtGjRItfCcd4yfvx4pkyZ4vH2Bw4coE+fPpnxue+32L9/PzfddJPX4urbt2+28tmnT59m4MCBNG3alI4dO2aW79i9e3e27V5//XXatGmTWVq7oKzMhTF+sGMHHDxYsKSQkQGrV3un5IW/lC9fPvPu2i+++IIxY8awYsWKXLdPTU1lxIgRrF69mrCwME6fPp354VdUjB07lh49enD//fcDsH79esApfZGfeRnysmDBgsxKsW5vvPEG1apVIzY2lrlz5zJ69Gjee++9bNvMnj2bqVOnsmzZMqpVq1aoGOxMwRg/WLnSec5vUujY0RmpVJwvIR07duy8H1THjx8nLS2NGjVqAE5No4svvhiAjz/+mI4dO3LJJZdw9dVXc+DAAcD5pj9kyBCuueYawsPDWbBgAY8++ijR0dH06tUrs6xEeHg4o0ePzqyrFBsbe077O3bsoFevXrRt25Yrrrgix4mBzi6d7Z7vIes39ttvvz3zbuZatWoxYcIEAJ577rnM0tnjxo3L8RicOHGCF154gSeffDLb8qyls2+66SaWLl1K1puO582bx7PPPsuSJUuoWbNmnsfZE3amYIwffP89VKkCLVrk731VqjgzsxU0KTzwAHihHE42MTHw0kt5b3Pq1CliYmJISUkhPj6eZcsyCyITExNzTo2e6tWr07dvXxo1akT37t3p06cPgwcPJigoiMsvv5wff/wREWHGjBlMnjyZ559/HnA+zL/++ms2bdpEp06d+OCDD5g8eTI33HADn376Kddffz0AF1xwAatXr+Z///sfDzzwAJ988km29keMGMFrr71GREQEq1at4u67784WM8A999zDwIEDeeWVV7j66qsZNmwY9erVy7bNjBkzANizZw89e/Zk6NChLFmyhO3bt7N69WpUlb59+/LNN9/QpUuXbO/95z//ycMPP0yFChWyLd+3bx8NGjhzkIWEhFClShWSkpIy27n33nv55Zdfzim5UVB2pmCMH3z/PXTqBEEF+B/XubMz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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "np.random.seed(0)\n",
    "new_sample_size = 40000\n",
    "new_head_counts = np.random.binomial(new_sample_size, 0.5, 100000)\n",
    "new_mean, new_std = stats.norm.fit(new_head_counts / new_sample_size)\n",
    "new_likelihoods = stats.norm.pdf(bin_edges, new_mean, new_std)\n",
    "plt.plot(bin_edges, normal_likelihoods, color='k', linestyle='--', \n",
    "         label='A: Sample Size 10K')\n",
    "plt.plot(bin_edges, new_likelihoods, color='b', label='B: Sample Size 40K')\n",
    "plt.legend()\n",
    "plt.xlabel('Sample Mean')\n",
    "plt.ylabel('Relative Likelihood')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Both Normal distributions are centered around the sample mean value of 0.5. This represents an estimate of the true Bernoulli mean. Let's calculate the 95% confidence interval for the true Bernoulli mean, using Normal Distribution B. SciPy allows us to compute that interval by calling `stats.norm.interval(0.95, mean, std)`. \n",
    "\n",
    "**Listing 6. 10. Computing a confidence interval using SciPy**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The true mean of the sampled binomial distribution is between 0.495 and 0.505\n"
     ]
    }
   ],
   "source": [
    "mean, std = new_mean, new_std\n",
    "start, end = stats.norm.interval(0.95, mean, std)\n",
    "print(f\"The true mean of the sampled binomial distribution is between {start:.3f} and {end:.3f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We are 95% confident that the true mean of our sampled Bernoulli distribution is between 0.495 and 0.505. In fact, that mean is equal to exactly 0.5. We can confirm this using SciPy.\n",
    "\n",
    "**Listing 6. 11. Confirming the Bernoulli mean**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [],
   "source": [
    "assert stats.binom.mean(1, 0.5) == 0.5"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's now attempt to estimate the variance of the Bernoulli distribution based on the plotted Normal curves. The peak of Distribution B is twice as high as the peak of Distribution A. This height is inversely proportional to the standard deviation. Thus, we can infer that the variance of Distribution B is one-fourth the variance of Distribution A. \n",
    "\n",
    "**Listing 6. 12. Assessing shift in variance after increased sampling**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The ratio of variances is approximately 0.25\n"
     ]
    }
   ],
   "source": [
    "variance_ratio = (new_std ** 2) / (fitted_std ** 2) \n",
    "print(f\"The ratio of variances is approximately {variance_ratio:.2f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "It appears that variance is inversely proportional to sample size. If so, than a four-fold decrease in sample size from 10,000 to 2500 should generate a four-fold increase in the variance.\n",
    "\n",
    "**Listing 6. 13. Assessing shift in variance after decreased sampling**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The ratio of variances is approximately 4.0\n"
     ]
    }
   ],
   "source": [
    "np.random.seed(0)\n",
    "reduced_sample_size = 2500\n",
    "head_counts = np.random.binomial(reduced_sample_size, 0.5, 100000)\n",
    "_, std = stats.norm.fit(head_counts / float(reduced_sample_size))\n",
    "variance_ratio = (std ** 2) / (fitted_std ** 2) \n",
    "print(f\"The ratio of variances is approximately {variance_ratio:.1f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "A four-fold decrease in the sample size leads to a four-fold increase in the variance. Thus, if we decrease the sample size from 10,000 to 1, we can expect 10,000-fold increase in the variance.\n",
    "\n",
    "**Listing 6. 14. Predicting variance for a sample size of 1**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Estimated variance for a sample size of 1 is 0.25\n"
     ]
    }
   ],
   "source": [
    "estimated_variance = (fitted_std ** 2) * 10000\n",
    "print(f\"Estimated variance for a sample size of 1 is {estimated_variance:.2f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "If the sample size were 1, then our `sample_means`  array would simply be a sequence of randomly recorded ones and zeroes. By definition, that array would represent the output of the Bernoulli distribution. Consequently, our estimated variance for a sample size of 1 equals the variance of the Bernoulli distribution. \n",
    "\n",
    "**Listing 6. 15. Confirming the predicted variance for a sample size of 1**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [],
   "source": [
    "assert stats.binom.var(1, 0.5) == 0.25"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "According the Central Limit Theorem, sampling mean-values from almost any distribution will produce a Normal curve. The mean of the Normal curve will approximate the mean of the underlying distribution. Also, the variance of the Normal curve multiplied by the sample size will approximate the variance of the underlying distribution. Using this relationship, we can estimate both mean and variance of almost any distribution through random sampling.\n",
    "\n",
    "## 6.2. Determining Mean and Variance of a Population through Random Sampling\n",
    "\n",
    "Suppose we are tasked with finding the average age of people living in a town. The town's population is exactly 50,000 people. Below, we'll simulate the ages of the townsfolk using the `np.random.randint` module."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.random.seed(0)\n",
    "population_ages = np.random.randint(1, 85, size=50000)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The mean of the entire population is the **population mean**. The variance of an entire population is the **population variance**. Let's quickly compute the population mean and population variance of our simulated town.\n",
    "\n",
    "**Listing 6. 17. Computing population mean and variance**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [],
   "source": [
    "population_mean = population_ages.mean()\n",
    "population_variance = population_ages.var()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Computing the population mean is easy when we have simulated data. However, obtaining that data in real life would be incredibly time consuming. A simpler approach would be to interview 10 randomly chosen people in the town. We'd record the ages from this random sample, and afterwards compute the sample mean. Let's simulate the sampling process by drawing 10 random ages from the `np.random.choice` module.\n",
    "\n",
    "**Listing 6. 18. Simulating 10 interviewed people**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.random.seed(0)\n",
    "sample_size = 10\n",
    "sample = np.random.choice(population_ages, size=sample_size)\n",
    "sample_mean = sample.mean()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Of course, our sample mean is likely to be noisy and inexact. We can measure that noise by finding the percent difference between `sample_mean` and `population_mean`.\n",
    "\n",
    "**Listing 6. 19. Comparing sample mean to population mean**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "There is a 27.59 percent difference between means.\n"
     ]
    }
   ],
   "source": [
    "percent_diff = lambda v1, v2: 100 * abs(v1 - v2) / v2    \n",
    "percent_diff_means = percent_diff(sample_mean, population_mean)\n",
    "print(f\"There is a {percent_diff_means:.2f} percent difference between means.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Our sample is insufficient to estimate the mean. Perhaps we should raise our sampling to cover 1,000 residents of the town. We can post an ad in the local paper asking for 100 volunteers. Each volunteer will survey 10 random people, in order to sample their ages. Afterwards, every volunteer will send us a computed sample mean. \n",
    "\n",
    "**Listing 6. 20. Computing sample means across 1,000 people**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.random.seed(0)\n",
    "sample_means = [np.random.choice(population_ages, size=sample_size).mean() \n",
    "                for _ in range(100)]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "According to the Central Limit Theorem, a histogram of sample means should resemble the Normal distribution. Furthermore, the mean of the Normal distribution should approximate the population mean.\n",
    "\n",
    "**Listing 6. 21. Fitting sample means to a Normal curve**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "likelihoods, bin_edges, _  = plt.hist(sample_means, bins='auto', alpha=0.2, \n",
    "                                      color='r', density=True)\n",
    "mean, std = stats.norm.fit(sample_means)\n",
    "normal_likelihoods = stats.norm.pdf(bin_edges, mean, std)\n",
    "plt.plot(bin_edges, normal_likelihoods, color='k', linestyle='--')\n",
    "plt.xlabel('Sample Mean')\n",
    "plt.ylabel('Relative Likelihood')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The histogram’s shape still approximates a Normal distribution. We’ll print that distribution’s mean and compare it to the population mean.\n",
    "\n",
    "**Listing 6. 22. Comparing Normal mean to population mean**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Actual population mean is approximately 42.53\n",
      "There is a 2.17% difference between means.\n"
     ]
    }
   ],
   "source": [
    "print(f\"Actual population mean is approximately {population_mean:.2f}\")\n",
    "percent_diff_means = percent_diff(mean, population_mean)\n",
    "print(f\"There is a {percent_diff_means:.2f}% difference between means.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Our result, while not perfect, is still a very good approximation of the actual average age within the town. Now, we’ll briefly turn our attention to the standard deviation computed from the Normal distribution. We simply need to multiply the computed variance by sample size.\n",
    "\n",
    "**Listing 6. 23. Estimating the population variance**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [],
   "source": [
    "normal_variance = std ** 2\n",
    "estimated_variance = normal_variance * sample_size"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let’s compare the estimated variance to the population variance.\n",
    "\n",
    "**Listing 6. 24. Comparing estimated variance to population variance**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Estimated variance is approximately 576.73\n",
      "Actual population variance is approximately 584.33\n",
      "There is a 1.30 percent difference between variances.\n"
     ]
    }
   ],
   "source": [
    "print(f\"Estimated variance is approximately {estimated_variance:.2f}\")\n",
    "print(f\"Actual population variance is approximately {population_variance:.2f}\")\n",
    "percent_diff_var = percent_diff(estimated_variance, population_variance)\n",
    "print(f\"There is a {percent_diff_var:.2f} percent difference between variances.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "There is approximately a 1.3% difference between the estimated variance and the population variance. We've thus approximated the town's variance to a relative accurate degree, while only sampling 2% of the people living in the town.\n",
    "\n",
    "## 6.3. Making Predictions Using Mean and Variance\n",
    "\n",
    "Let us now consider a new scenario, in which we analyze a fifth grade classroom.  Mrs. Mann has spent 25 years teaching fifth-grade. Her classroom holds 20 students. Thus, over the years, she has taught 500 students total. Each of those students have taken an assessment exam upon the completion of her class. The mean and variance of their exam grades are 84 and 25, respectively. We'll refer to these values as the population mean an population variance, since they cover the entire population of students who've ever been taught by Mrs. Mann.\n",
    "\n",
    "**Listing 6. 25. Population mean and variance of recorded grades**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [],
   "source": [
    "population_mean = 84\n",
    "population_variance = 25"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Lets model the yearly test results of Mrs. Mann's class as a collection of 20 grades randomly drawn from a distribution with mean `population_mean` and variance `population variance`. According to Central Limit Theorem, the likelihood distribution of mean grades will resemble a Normal curve. The mean of the Normal curve will equal `population_mean`. The standard deviation of the Normal curve will equal the **SEM**. By definition, the SEM equals the population standard deviation divided by the square root of the sample size. We’ll compute the curve parameters, and plot the Normal curve below.\n",
    "\n",
    "**Listing 6. 26. Plotting a Normal curve using mean and SEM**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "mean = population_mean\n",
    "population_std = population_variance ** 0.5\n",
    "sem = population_std / (20 ** 0.5)\n",
    "grade_range = range(101)\n",
    "normal_likelihoods = stats.norm.pdf(grade_range, mean, sem)\n",
    "plt.plot(grade_range, normal_likelihoods)\n",
    "plt.xlabel('Mean Grade of 20 Students (%)')\n",
    "plt.ylabel('Relative Likelihood')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The area beneath the plotted curve approaches zero at values higher than 89%. \n",
    "Therefore, the probability of observing a mean grade that's at or above 90% is incredibly low. Still, to be sure, we'll need to somehow accurately measure the area under the Normal distribution.\n",
    "\n",
    "### 6.3.1. Computing the Area Beneath a Normal Curve\n",
    "\n",
    "We can estimate the area beneath a Normal curve by subdividing it into small, trapezoidal units. This ancient technique referred to as the **trapezoidal rule**.  The trapezoid rule is very easy to execute in just a few lines of code. Alternatively, we can utilize NumPy's `np.trapz` method to take the area of an inputted array. Lets apply the trapezoidal rule to our Normal distribution. \n",
    "\n",
    "**Listing 6. 27. Approximating the area using the trapezoidal rule**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Estimated area under the curve is 1.0000000000384808\n"
     ]
    }
   ],
   "source": [
    "total_area = np.sum([normal_likelihoods[i: i + 2].sum() / 2\n",
    "                    for i in range(normal_likelihoods.size - 1)])\n",
    "\n",
    "assert total_area == np.trapz(normal_likelihoods)\n",
    "print(f\"Estimated area under the curve is {total_area}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The estimated area is very close to 1.0, but its not exactly equal to 1.0. We can access a mathematically exact solution in SciPy, using the `stats.norm.sf` method. \n",
    "\n",
    "**Listing 6. 28. Computing the total area using SciPy**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [],
   "source": [
    "assert stats.norm.sf(0, mean, sem) == 1.0"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We expect `stats.norm.sf(mean, mean, sem)` to equal 0.5. This is because the mean perfectly splits the Normal curve into 2 equal halves. Meanwhile, we expect `np.trapz(normal_likelihoods[mean:])` to approximate but not fully equal 0.5. Lets confirm below.\n",
    "\n",
    "**Listing 6. 29. Inputting the mean into the survival function**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Estimated area beyond the mean is 0.5000000000192404\n"
     ]
    }
   ],
   "source": [
    "assert stats.norm.sf(mean, mean, sem) == 0.5\n",
    "estimated_area = np.trapz(normal_likelihoods[mean:])\n",
    "print(f\"Estimated area beyond the mean is {estimated_area}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now, lets execute stats.norm.sf(90, mean, sem). This will return the area over an interval of values lying beyond 90%. The area represents the likelihood of 20 students jointly acing an exam.\n",
    "\n",
    "**Listing 6. 30. Computing the probability of a good collective grade**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Probability of 20 students acing the exam is 4.012555633463782e-08\n"
     ]
    }
   ],
   "source": [
    "area  = stats.norm.sf(90, mean, sem)\n",
    "print(f\"Probability of 20 students acing the exam is {area}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 7. Statistical Hypothesis Testing\n",
    "\n",
    "## 7.1. Assessing the Divergence Between Sample Mean and Population Mean\n",
    "\n",
    "Imagine a scenario where we analyze every fifth grade classroom in North Dakota. All fifth graders in the state are given an identical assessment exam. The exam grades are fed into a database. The population mean and variance of the grades are 80 and 100, respectively.\n",
    "\n",
    "**Listing 7. 1. Population mean and variance of North Dakota's grades**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [],
   "source": [
    "population_mean = 80\n",
    "population_variance = 100"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now, suppose we travel to South Dakota. There, we find a class of 18 students that has outperformed North Dakota's population mean by 4 percentage points. If that high performance is just a random anomaly, then the **null hypothesis** is true. Let's temporarily assume that the null hypothesis is true, and that South Dakota's population mean is equal to North Dakota's population mean. Also, we'll assume that South Dakota's population variance is equal to North Dakota's population variance. Consequently, we can model our 18-student classroom as a random sample taken from a Normal distribution. That distribution's mean will equal `population_mean`. Meanwhile, its standard deviation will equal the SEM.\n",
    "\n",
    "**Listing 7. 2. Normal curve parameters if the null hypothesis is true**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [],
   "source": [
    "mean = population_mean\n",
    "sem = (population_variance / 18) ** 0.5"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "If the null hypothesis is true, then the probability of encountering an average exam grade of at-least 84% is equal to `stats.norm.sf(84 mean, sem)`. We'll now print out that probability.\n",
    "\n",
    "**Listing 7. 3. Finding the probability of a high-performance grade**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Probability of an average grade >= 84 is 0.044843010885182284\n"
     ]
    }
   ],
   "source": [
    "prob_high_grade = stats.norm.sf(84, mean, sem)\n",
    "print(f\"Probability of an average grade >= 84 is {prob_high_grade}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We will now compute the probability of observing an exam-average that’s less than or equal to 76%. The calculation can be carried out with SciPy’s `stats.norm.cdf` method.\n",
    "\n",
    "**Listing 7. 4. Finding the probability of a low-performance grade**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Probability of an average grade <= 76 is 0.044843010885182284\n"
     ]
    }
   ],
   "source": [
    "prob_low_grade = stats.norm.cdf(76, mean, sem)\n",
    "print(f\"Probability of an average grade <= 76 is {prob_low_grade}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "It appears that `prob_low_grade` is exactly equal to `prob_high_grade`. The cumulative distribution and the survival function are mirror images of each other. Thus, `stats.norm.sf(mean + x, mean, sem)` will always equal `stats.norm.cdf(mean - x, mean, sem)` for any input `x`. Below, we will demonstrate this symmetry. \n",
    "\n",
    "**Listing 7. 5. Comparing the survival and the cumulative distribution functions**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "for x in range(-100, 100):\n",
    "    sf_value = stats.norm.sf(mean + x, mean,  sem)\n",
    "    assert sf_value == stats.norm.cdf(mean - x, mean, sem)\n",
    "\n",
    "plt.axvline(mean, color='k', label='Mean', linestyle=':')\n",
    "x_values = range(60, 101)\n",
    "plt.plot(x_values, stats.norm.cdf(x_values, mean, sem), \n",
    "         label='Cumulative Distribution')\n",
    "plt.plot(x_values, stats.norm.sf(x_values, mean, sem),\n",
    "         label='Survival Function', linestyle='--', color='r')\n",
    "plt.xlabel('Sample Mean')\n",
    "plt.ylabel('Probability')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Conceptually, the sum of `prob_high_grade` and `prob_low_grade` represents the probability of observing an extreme deviation from the population mean when the null hypothesis is true. Statisticians refer to this null hypothesis-driven probability as the **p-value**.\n",
    "\n",
    "**Listing 7. 6. Computing the null hypothesis driven p-value**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The p-value is 0.08968602177036457\n"
     ]
    }
   ],
   "source": [
    "p_value = prob_low_grade + prob_high_grade\n",
    "assert p_value == 2 * prob_high_grade\n",
    "print(f\"The p-value is {p_value}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "What if the average of the South Dakotan class had equaled 85%, not 84%? Will that 1-percent shift influence our p-value output? Let’s find out.\n",
    "\n",
    "**Listing 7. 7. Computing the p-value for an adjusted sample mean**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The updated p-value is 0.03389485352468927\n"
     ]
    }
   ],
   "source": [
    "def compute_p_value(observed_mean, population_mean, sem):\n",
    "    mean_diff = abs(population_mean - observed_mean)\n",
    "    prob_high = stats.norm.sf(population_mean + mean_diff, population_mean, sem)\n",
    "    return 2 * prob_high\n",
    "\n",
    "new_p_value = compute_p_value(85, mean, sem)\n",
    "print(f\"The updated p-value is {new_p_value}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The new p-value is below 0.05. The threshold of 0.05 is called the **significance level**, and p-values below that threshold are deemed to be **statistically significant.** We'll temporarily set the significance level to a very stringent value of 0.001. What would be the minimum grade-average required to trigger this p-value threshold? Let's find out.\n",
    "\n",
    "**Listing 7. 8. Scanning for a stringent p-value result**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "An average grade of 88 leads to a p-value of 0.0006885138966450773\n"
     ]
    }
   ],
   "source": [
    "for grade in range(80, 100):\n",
    "    p_value = compute_p_value(grade, mean, sem)\n",
    "    if p_value < 0.001:\n",
    "        break\n",
    "\n",
    "print(f\"An average grade of {grade} leads to a p-value of {p_value}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Our lowering of the cutoff has inevitably exposed us to an increased risk of **type II** errors.\n",
    "Consequently, in this book, we’ll maintain the commonly accepted p-value cutoff of 0.05.\n",
    "However, we will also proceed with excessive caution in order to avoid erroneously\n",
    "rejecting the null hypothesis.\n",
    "\n",
    "## 7.2. Data Dredging: Coming to False Conclusions through Oversampling\n",
    "\n",
    "Suppose that North Dakota's state-wide test performance does not diverge from the exam results in the other 49 states.  We travel to Montana,  and choose a random fifth-grade classroom of 18 students. We then compute the classroom's average grade. Since the null hypotheses is secretly true, we can simulate the value of that average grade by sampling from a Normal distribution defined by `mean` and `sem`.\n",
    "\n",
    "**Listing 7. 9. Randomly sampling Montana’s exam performance**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Average grade equals 84.16\n"
     ]
    }
   ],
   "source": [
    "np.random.seed(0)\n",
    "random_average_grade = np.random.normal(mean, sem)\n",
    "print(f\"Average grade equals {random_average_grade:.2f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The average exam grade in the class equaled approximately 84.16. We can determine if that average is statistically significant by checking if its p-value is less than or equal to 0.05.\n",
    "\n",
    "**Listing 7. 10. Testing significance of Montana’s exam performance**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The observed result is not statistically significant\n"
     ]
    }
   ],
   "source": [
    "if compute_p_value(random_average_grade, mean, sem) <= 0.05:\n",
    "    print(\"The observed result is statistically significant\")\n",
    "else:\n",
    "    print(\"The observed result is not statistically significant\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The average-grade is not statistically significant. We will continue our journey. We'll visit a single 18-student classroom in each of the remaining 48 states. Once we discover a statistically significant p-value, our journey will end.\n",
    "\n",
    "**Listing 7. 11. Randomly searching for a significant state result**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "We visited state 2\n",
      "We visited state 3\n",
      "We visited state 4\n",
      "We visited state 5\n",
      "We found a statistically significant result.\n",
      "The average grade was 85.28\n",
      "The p-value was 0.025032993883401307\n"
     ]
    }
   ],
   "source": [
    "np.random.seed(0)\n",
    "for i in range(1, 49):\n",
    "    print(f\"We visited state {i + 1}\")\n",
    "    random_average_grade = np.random.normal(mean, sem)\n",
    "    p_value = compute_p_value(random_average_grade, mean, sem)\n",
    "    if p_value <= 0.05:\n",
    "        print(\"We found a statistically significant result.\")\n",
    "        print(f\"The average grade was {random_average_grade:.2f}\")\n",
    "        print(f\"The p-value was {p_value}\")\n",
    "        break\n",
    "\n",
    "if i == 48:\n",
    "    print(\"We visited every state and found no significant results.\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The fifth state that we visited produced a statistically significant result However, our conclusions are erroneous. We have indulged in the cardinal statistical sin of **data dredging**. In data-dredging, experiments are repeated over and over again, until a statistically significant result is found. \n",
    "\n",
    "Avoiding data dredging is not difficult. We must simply choose in advance a finite number of experiments to run. Afterwards, we should set our significance level to 0.05 divided by the planned experiment count. This simple technique is known as the **Bonferroni correction**. Let's repeat our analysis of US exam performance using the Bonferonni correction. We'll start by adjusting the significance level.\n",
    "\n",
    "**Listing 7. 12. Using the Bonferroni correction to adjust significance**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_planned_experiments = 49\n",
    "significance_level = .05 / num_planned_experiments"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We’ll proceed to re-run our previous analysis. The analysis will terminate if we encounter a\n",
    "p-value that’s less than or equal to significance_level.\n",
    "\n",
    "**Listing 7. 13. Re-running an analysis using an adjusted significance level**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "We visited every state and found no significant results.\n"
     ]
    }
   ],
   "source": [
    "np.random.seed(0)\n",
    "for i in range(49):\n",
    "    random_average_grade = np.random.normal(mean, sem)\n",
    "    p_value = compute_p_value(random_average_grade, mean, sem)\n",
    "    if p_value <= significance_level:\n",
    "        print(\"We found a statistically significant result.\")\n",
    "        print(f\"The average grade was {random_average_grade:.2f}\")\n",
    "        print(f\"The p-value was {p_value}\")\n",
    "        break\n",
    "\n",
    "if i == 48:\n",
    "    print(\"We visited every state and found no significant results.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 7.3. Bootstrapping with Replacement: Testing a Hypothesis When the Population Variance is Unknown\n",
    "Consider the following scenario, in which we own a very large aquarium. It holds 20 tropical fish of varying lengths. The fish lengths range from 2 cm to nearly 120 cm. The average fish-length equals 27 cm. We'll represent these fish lengths using the `fish_length` array below.\n",
    "\n",
    "**Listing 7. 14. Defining lengths of fish in an aquarium**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [],
   "source": [
    "fish_lengths = np.array([46.7, 17.1, 2.0, 19.2, 7.9, 15.0, 43.4, \n",
    "                         8.8, 47.8, 19.5, 2.9, 53.0, 23.5, 118.5, \n",
    "                         3.8, 2.9, 53.9, 23.9, 2.0, 28.2])\n",
    "assert fish_lengths.mean() == 27"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The population mean-length of wild, tropical fish equals 37 cm. There is a sizable 10 cm difference between the population mean and our sample mean. Is that difference statistically significant? We would like to find out, but we don't have a population variance. Thus, we can't compute the SEM. So what should we do? Well, we can implement a technique known as **Bootstrapping with Replacement**. We'll begin the Bootstrapping procedure by removing a random fish from the aquarium, and subsequently measuring its length. \n",
    "\n",
    "**Listing 7. 15. Sampling a random fish from the aquarium**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.random.seed(0)\n",
    "random_fish_length = np.random.choice(fish_lengths, size=1)[0]\n",
    "sampled_fish_lengths = [random_fish_length]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now, we will place the chosen fish back into the aquarium. Afterwards, we'll repeat the sampling procedure 19 more times until 20 random fish-lengths have been measured.\n",
    "\n",
    "**Listing 7. 16. Sampling 20 random fish with repetition**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.random.seed(0)\n",
    "for _ in range(20):\n",
    "    random_fish_length = np.random.choice(fish_lengths, size=1)[0]\n",
    "    sampled_fish_lengths.append(random_fish_length)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The `sampled_fish_lengths` list contains 20 measurements. However, the elements of `fish_lengths` and `sampled_fish_lengths` are not identical. Due to random sampling, the mean values of the array and list are likely to differ.\n",
    "\n",
    "**Listing 7. 17. Comparing the sample mean to the aquarium mean**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Mean of sampled fish-lengths is 26.09 cm\n"
     ]
    }
   ],
   "source": [
    "sample_mean = np.mean(sampled_fish_lengths)\n",
    "print(f\"Mean of sampled fish-lengths is {sample_mean:.2f} cm\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "If we sample another 20 measurements from the aquarium, we can expect the resulting sample mean to also deviate from 27 cm. Let’s confirm this by repeating our sampling using a single line of code; `np.random.choice(fish_lengths, size=20, replace=True)`.\n",
    "\n",
    "**Listing 7. 18. Sampling with replacement using NumPy**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Mean of the new sampled fish-lengths is 26.16 cm\n"
     ]
    }
   ],
   "source": [
    "np.random.seed(0)\n",
    "new_sampled_fish_lengths = np.random.choice(fish_lengths, size=20, \n",
    "                                            replace=True)\n",
    "new_sample_mean = new_sampled_fish_lengths.mean()\n",
    "print(f\"Mean of the new sampled fish-lengths is {new_sample_mean:.2f} cm\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Our sampled mean-values are randomly distributed Let’s explore the shape of this random distribution by repeating our sampling process 150,000 times.\n",
    "\n",
    "**Listing 7. 19. Plotting the distribution of 150k sampled means**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "np.random.seed(0)\n",
    "sample_means = [np.random.choice(fish_lengths, \n",
    "                                size=20,\n",
    "                                replace=True).mean()\n",
    "               for _ in range(150000)]\n",
    "likelihoods, bin_edges, _ = plt.hist(sample_means, bins='auto', \n",
    "                                      edgecolor='black', density=True)\n",
    "plt.xlabel('Binned Sample Mean')\n",
    "plt.ylabel('Relative Likelihood')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The histogram's shape is not symmetric, its left side rises steeper than its right side. Mathematicians refer to this asymmetry as a skew. We can confirm the skew within our histogram, by calling `stats.skew(sample_means))`.\n",
    "\n",
    "**Listing 7. 20. Computing the skew of an asymmetric distribution**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 202,
   "metadata": {},
   "outputs": [],
   "source": [
    "assert abs(stats.skew(sample_means)) > 0.4 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Our asymmetric histogram cannot be modeled using a Normal distribution. Instead, we can fit the histogram to a generic distribution using `stats.rv_histogram`. The method will return a `random_variable` SciPy object. The object will contain `pdf`, and `cdf`, and `sf` methods, just like `stats.norm.` Lets plot `random_variable.pdf(bin_edges)`.\n",
    "\n",
    "**Listing 7. 21. Fitting to data to a generic distribution using SciPy**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 203,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "random_variable = stats.rv_histogram((likelihoods, bin_edges))\n",
    "plt.plot(bin_edges, random_variable.pdf(bin_edges))\n",
    "plt.hist(sample_means, bins='auto', alpha=0.1,  color='r', density=True)\n",
    "plt.xlabel('Sample Mean')\n",
    "plt.ylabel('Relative Likelihood')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As expected, the probability density function perfectly resembles the histogram shape. Let’s now plot both the cumulative distribution function and the survival function associated with `random_variable`.\n",
    "\n",
    "**Listing 7. 22. Plotting mean and interval-areas for a generic distribution**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 204,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Mean of the distribution is approximately 27.00 cm\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "rv_mean = random_variable.mean()\n",
    "print(f\"Mean of the distribution is approximately {rv_mean:.2f} cm\")\n",
    "\n",
    "plt.axvline(random_variable.mean(), color='k', label='Mean', linestyle=':')\n",
    "plt.plot(bin_edges, random_variable.cdf(bin_edges), \n",
    "         label='Cumulative Distribution')\n",
    "plt.plot(bin_edges, random_variable.sf(bin_edges),\n",
    "         label='Survival', linestyle='--', color='r')\n",
    "plt.xlabel('Sample Mean')\n",
    "plt.ylabel('Probability')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "What is probability that 20 fish sampled with replacement produce a mean as extreme as the population mean? Extremeness is defined as a sampled output that's at-least 10 cm away from 27. Summing `random_variable.sf(37)` and `random_variable.cdf(17)` will give us our answer.\n",
    "\n",
    "**Listing 7. 23. Computing the probability of an extreme sample mean**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 205,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Probability of observing an extreme sample mean is approximately 0.10\n"
     ]
    }
   ],
   "source": [
    "prob_extreme= random_variable.sf(37) + random_variable.cdf(17)\n",
    "print(f\"Probability of observing an extreme sample mean is approximately {prob_extreme:.2f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "It has been shown that sampling with replacement approximates a dataset's SEM Thus, if the null hypothesis is true, then our missing SEM is equal to `random_variable.std`. This give us yet another way of computing the p-value.\n",
    "\n",
    "**Listing 7. 24. Using Bootstrapping to estimate the SEM**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 206,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "P-value computed from estimated SEM is approximately 0.10\n"
     ]
    }
   ],
   "source": [
    "estimated_sem = random_variable.std()\n",
    "p_value = compute_p_value(27, 37, estimated_sem)\n",
    "print(f\"P-value computed from estimated SEM is approximately {p_value:.2f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Furthermore, we can estimate the p-value simply by computing the frequency of extreme observations.\n",
    "\n",
    "**Listing 7. 25. Computing the  p-value from direct counts**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 207,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "P-value is approximately 0.10\n"
     ]
    }
   ],
   "source": [
    "number_extreme_values = 0\n",
    "for sample_mean in sample_means:\n",
    "    if not 17 < sample_mean < 37:\n",
    "        number_extreme_values += 1\n",
    "\n",
    "p_value =  number_extreme_values / len(sample_means)\n",
    "print(f\"P-value is approximately {p_value:.2f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Bootstrapping with Replacement presupposes the knowledge of a population mean. Unfortunately, in real-life situations, the population mean is rarely known. In the next section, we learn how to compare collected samples when both the population mean and the population variance are unknown.\n",
    "\n",
    "## 7.4. Permutation Testing: Comparing Means of Samples when the Population Parameters are Unknown\n",
    "\n",
    "Suppose our neighbor also owns an aquarium. Her aquarium contains 10 fish, whose average length is 46 cm. We’ll represent these new fish-lengths using the `new_fish_length array` below.\n",
    "\n",
    "**Listing 7. 26. Defining lengths of fish in a new aquarium**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {},
   "outputs": [],
   "source": [
    "new_fish_lengths = np.array([51, 46.5, 51.6, 47, 54.4, 40.5, 43, 43.1, \n",
    "                             35.9, 47.0])\n",
    "assert new_fish_lengths.mean() == 46"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We want to compare the contents of our neighbor’s aquarium with our own. We’ll begin by\n",
    "measuring the difference between `new_fish_length.mean()` and\n",
    "`fish_length.mean()`.\n",
    "\n",
    "**Listing 7. 27. Computing difference between two sample means**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "There is a 19.00 cm difference between the two means\n"
     ]
    }
   ],
   "source": [
    "mean_diff = abs(new_fish_lengths.mean() - fish_lengths.mean())\n",
    "print(f\"There is a {mean_diff:.2f} cm difference between the two means\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We will now to carry out a **Permutation test**, where `mean_diff` is leveraged to compute statistical significance. We'll begin the Permutation test by placing all 30 fish into a single aquarium. The unification of our fish can be modeled using the `np.hstack` method.\n",
    "\n",
    "**Listing 7. 28. Merging two arrays using `np.haystack`**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {},
   "outputs": [],
   "source": [
    "total_fish_lengths = np.hstack([fish_lengths, new_fish_lengths])\n",
    "assert total_fish_lengths.size == 30"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Once the fish are grouped together, we will allow them to swim in random directions. We’ll use the `np.random.shuffle` method to shuffle the positions of the fish.\n",
    "\n",
    "**Listing 7. 29. Shuffling the positions of merged fish**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.random.seed(0)\n",
    "np.random.shuffle(total_fish_lengths)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now, we'll choose 20 of our randomly shuffled fish, and place them in a separate aquarium. Once more, we'll have 20 fish in aquarium A and 10 fish in aquarium B. However, the mean-lengths of the fish in each aquarium will probably differ from `fish_lengths.mean(`) and `new_fish_lengths.mean()`. Consequently, the difference between mean fish-lengths will also change.\n",
    "\n",
    "**Listing 7. 30. Computing difference between two random sample means**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The new difference between mean fish lengths is 14.33\n"
     ]
    }
   ],
   "source": [
    "random_20_fish_lengths = total_fish_lengths[:20]\n",
    "random_10_fish_lengths = total_fish_lengths[20:]\n",
    "mean_diff = random_20_fish_lengths.mean() - random_10_fish_lengths.mean() \n",
    "print(f\"The new difference between mean fish lengths is {mean_diff:.2f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Not surprisingly, `mean_diff` is fluctuating random variable. We therefore can proceed to find\n",
    "its distribution through random sampling. Below, will repeat our fish-shuffling procedure\n",
    "30,000 times in order to obtain a histogram of `mean_diff` values.\n",
    "\n",
    "**Listing 7. 31. Plotting the distribution of the fluctuating difference between means**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 213,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "np.random.seed(0)\n",
    "mean_diffs = []\n",
    "for _ in range(30000):\n",
    "    np.random.shuffle(total_fish_lengths)\n",
    "    mean_diff = total_fish_lengths[:20].mean() - total_fish_lengths[20:].mean()\n",
    "    mean_diffs.append(mean_diff)\n",
    "    \n",
    "likelihoods, bin_edges, _ = plt.hist(mean_diffs, bins='auto', \n",
    "                                      edgecolor='black', density=True)\n",
    "plt.xlabel('Binned Mean Difference')\n",
    "plt.ylabel('Relative Likelihood')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next, we will fit the histogram to a random variable using the `stats.rv_hist` method.\n",
    "\n",
    "**Listing 7. 32. Fitting the histogram to a random variable**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 214,
   "metadata": {},
   "outputs": [],
   "source": [
    "random_variable = stats.rv_histogram((likelihoods, bin_edges))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We want to know the probability of observing an extreme value when the null hypothesis is true.\n",
    "We’ll define extremeness as a difference between means whose absolute value is at-least 19\n",
    "cm. Thus, our p-value will equal `random_variable.cdf(-19) + random_variable.sf(19)`.\n",
    "\n",
    "**Listing 7. 33. Computing the Permutation p-value**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 215,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "P-value is approximately 0.04\n"
     ]
    }
   ],
   "source": [
    "p_value = random_variable.sf(19) + random_variable.cdf(-19)\n",
    "print(f\"P-value is approximately {p_value:.2f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As an aside, we can simplify our Permutation test by leveraging the Law of Large Numbers. We simply need to compute the frequency of extreme recorded samples, just like we did with Bootstrapping with Replacement.\n",
    "\n",
    "**Listing 7. 34. Computing the Permutation p-value from direct counts**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 216,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "P-value is approximately 0.04\n"
     ]
    }
   ],
   "source": [
    "number_extreme_values = 0.0\n",
    "for min_diff in mean_diffs:\n",
    "    if not -19 < min_diff < 19:\n",
    "        number_extreme_values += 1\n",
    "\n",
    "p_value =  number_extreme_values / len(mean_diffs)\n",
    "print(f\"P-value is approximately {p_value:.2f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 8. Analyzing Tables Using Pandas\n",
    "\n",
    "## 8.1. Storing Tables Using Basic Python\n",
    "\n",
    "Let's define a sample table in Python. The table will store measurements for various species of fish. The measurements will cover both length and width, in centimeters. We'll represent this table as a dictionary. \n",
    "\n",
    "**Listing 8. 1. Storing a table using Python data-structures**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "fish_measures = {'Fish': ['Angelfish', 'Zebrafish', 'Killifish', 'Swordtail'],\n",
    "                 'Length':[15.2, 6.5, 9, 6],\n",
    "                 'Width': [7.7, 2.1, 4.5, 2]}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Suppose we want to know the length of a zebrafish. To obtain the length, we must first access the index of the `'Zebrafish'` element in `fish_measures['Fish']`. Afterwards, we'll need to check index in `fish_measures['Length']`.\n",
    "\n",
    "**Listing 8. 2. Accessing table columns using a dictionary**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The length of a zebrafish is 6.50 cm\n"
     ]
    }
   ],
   "source": [
    "zebrafish_index = fish_measures['Fish'].index('Zebrafish')\n",
    "zebrafish_length = fish_measures['Length'][zebrafish_index]\n",
    "print(f\"The length of a zebrafish is {zebrafish_length:.2f} cm\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Our dictionary representation is functional, but is also difficult to use. A better solution is to use the  external Pandas library.\n",
    "\n",
    "# 8.2. Exploring Tables Using Pandas\n",
    "\n",
    "We'll proceed to install the Pandas library. Once Pandas is installed, we will import it as `pd`, using common Pandas usage convention.\n",
    "\n",
    "**Listing 8. 3. Importing the Pandas library**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 219,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We’ll now load our fish_measures tables into Pandas. This can be done by calling `pd.DataFrame(fish_measures)`.\n",
    "\n",
    "**Listing 8. 4. Loading a table into Pandas**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 220,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "        Fish  Length  Width\n",
      "0  Angelfish    15.2    7.7\n",
      "1  Zebrafish     6.5    2.1\n",
      "2  Killifish     9.0    4.5\n",
      "3  Swordtail     6.0    2.0\n"
     ]
    }
   ],
   "source": [
    "df = pd.DataFrame(fish_measures)\n",
    "print(df)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The complete table contents are visible in the printed output. For larger tables, we might prefer to only print the first few rows. Calling `print(df.head(x))` will print out just the first `x` rows within a table.\n",
    "\n",
    "**Listing 8. 5. Accessing the first two rows of a table**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 221,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "        Fish  Length  Width\n",
      "0  Angelfish    15.2    7.7\n",
      "1  Zebrafish     6.5    2.1\n"
     ]
    }
   ],
   "source": [
    "print(df.head(2))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "A better way to summarize a larger Pandas table is to execute `pd.describe()`. By default, this method will generate statistics for all numeric columns within the table.\n",
    "\n",
    "**Listing 8. 6. Summarizing the numeric columns**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 222,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "          Length     Width\n",
      "count   4.000000  4.000000\n",
      "mean    9.175000  4.075000\n",
      "std     4.225616  2.678775\n",
      "min     6.000000  2.000000\n",
      "25%     6.375000  2.075000\n",
      "50%     7.750000  3.300000\n",
      "75%    10.550000  5.300000\n",
      "max    15.200000  7.700000\n"
     ]
    }
   ],
   "source": [
    "print(df.describe())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Myriad statistical information is included in the output. Sometimes, the extra information is not very useful. If all we care about is the mean, then we can omit all other outputs by calling `df.mean()`.\n",
    "\n",
    "**Listing 8. 7. Computing the column mean**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 223,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Length    9.175\n",
      "Width     4.075\n",
      "dtype: float64\n"
     ]
    }
   ],
   "source": [
    "print(df.mean())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The `df.describe()` method is primarily intended to be executed on numeric columns. However, we can force it to process strings by calling `df.describe(include=[np.object])`.\n",
    "\n",
    "**Listing 8. 8. Summarizing the string columns**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 224,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "             Fish\n",
      "count           4\n",
      "unique          4\n",
      "top     Killifish\n",
      "freq            1\n"
     ]
    }
   ],
   "source": [
    "print(df.describe(include=[np.object]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Pandas stores all data in NumPy for quick manipulation. We can easily retrieve the underlying NumPy array by accessing `df.values`.\n",
    "\n",
    "**Listing 8. 9. Retrieving the table as a 2D NumPy array**\n",
    "\n",
    "== 8.3. Retrieving Table Columns\n",
    "Let’s turn our attention to retrieving individual columns. The columns can be accessed using their column names. We can output all possible column names by calling `print(df.columns)`.\n",
    "\n",
    "**Listing 8. 10. Accessing all column names**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 225,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Index(['Fish', 'Length', 'Width'], dtype='object')\n"
     ]
    }
   ],
   "source": [
    "print(df.columns)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now let’s print all data stored in the column Fish. We’ll do this by accessing `df.Fish`.\n",
    "\n",
    "**Listing 8. 11. Accessing an individual column**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 226,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0    Angelfish\n",
      "1    Zebrafish\n",
      "2    Killifish\n",
      "3    Swordtail\n",
      "Name: Fish, dtype: object\n"
     ]
    }
   ],
   "source": [
    "print(df.Fish)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Please note that the printed output is not a NumPy array. In order to print a NumPy array, we must run `print(df.Fish.values)`.\n",
    "\n",
    "**Listing 8. 12. Retrieving a column as a NumPy array**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 227,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['Angelfish' 'Zebrafish' 'Killifish' 'Swordtail']\n"
     ]
    }
   ],
   "source": [
    "print(df.Fish.values)\n",
    "assert type(df.Fish.values) == np.ndarray"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can also access Fish using a  dictionary-style bracket representation. Below, we’ll print `df['Fish']`.\n",
    "\n",
    "**Listing 8. 13. Accessing a column using brackets**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 228,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0    Angelfish\n",
      "1    Zebrafish\n",
      "2    Killifish\n",
      "3    Swordtail\n",
      "Name: Fish, dtype: object\n"
     ]
    }
   ],
   "source": [
    "print(df['Fish'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The bracket representation allows us to retrieve multiple columns at once. If we wish to retrieve multiple columns, we simply execute `df[name_list]`, where name_list represents a list of column names.\n",
    "\n",
    "**Listing 8. 14. Accessing multiple column using brackets**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 229,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "        Fish  Length\n",
      "0  Angelfish    15.2\n",
      "1  Zebrafish     6.5\n",
      "2  Killifish     9.0\n",
      "3  Swordtail     6.0\n"
     ]
    }
   ],
   "source": [
    "print(df[['Fish', 'Length']])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can analyze data stored within df in variety of useful ways. We could, for instance, sort our rows based on a value of single column.\n",
    "\n",
    "**Listing 8. 15. Sorting rows by column value**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 230,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "        Fish  Length  Width\n",
      "3  Swordtail     6.0    2.0\n",
      "1  Zebrafish     6.5    2.1\n",
      "2  Killifish     9.0    4.5\n",
      "0  Angelfish    15.2    7.7\n"
     ]
    }
   ],
   "source": [
    "print(df.sort_values('Length'))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Furthermore, we can leverage values within columns to filter out unwanted rows. For example, calling `df[df.Width >= 3]` will return a table whose rows contain a width of at-least 3 cm.\n",
    "\n",
    "**Listing 8. 16. Filtering rows by column value**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 231,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "        Fish  Length  Width\n",
      "0  Angelfish    15.2    7.7\n",
      "2  Killifish     9.0    4.5\n"
     ]
    }
   ],
   "source": [
    "print(df[df.Width >= 3])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 8.4. Retrieving Table Rows\n",
    "\n",
    "Unlike columns, our rows do not have preassigned label values. To compensate, Pandas assigns a special index value for each row. The index for the Angelfish row is 0, and the index for the Swordtail row is 3. We can access these rows by calling `df.loc[[0, 3]]`.\n",
    "\n",
    "**Listing 8. 17. Accessing rows by index**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 232,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "        Fish  Length  Width\n",
      "0  Angelfish    15.2    7.7\n",
      "3  Swordtail     6.0    2.0\n"
     ]
    }
   ],
   "source": [
    "print(df.loc[[0, 3]])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Suppose we want to retrieve those rows whose Fish column contains either `'Angelfish'` or `'Swordtail'`. We need to execute `df[booleans']`, where `booleans` is list of `True` or `False` values that are `True` if they match a row of interest. How do we obtain the `booleans` list? One naïve approach is to iterate over `df.Fish`, returning `True` if a column-value appears in `['Angelfish', 'Swordtail']`. \n",
    "\n",
    "**Listing 8. 18. Accessing rows by column value**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 233,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "        Fish  Length  Width\n",
      "0  Angelfish    15.2    7.7\n",
      "3  Swordtail     6.0    2.0\n"
     ]
    }
   ],
   "source": [
    "booleans = [name in ['Angelfish', 'Swordtail']\n",
    "            for name in df.Fish]\n",
    "print(df[booleans])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can more concisely locate these rows by leveraging the Pandas `isin` method. Calling `df.Fish.isin(['Angelfish', Swordtail'])`will return an analogue of our previously computed `booleans` list.\n",
    "\n",
    "**Listing 8. 19. Accessing rows by column value using `isin`**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 234,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "        Fish  Length  Width\n",
      "0  Angelfish    15.2    7.7\n",
      "3  Swordtail     6.0    2.0\n"
     ]
    }
   ],
   "source": [
    "print(df[df.Fish.isin(['Angelfish', 'Swordtail'])])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's remedy replace the row indices with species. We'll swap numbers for species-names using the `df.set_index` method.\n",
    "\n",
    "**Listing 8. 20. Swapping row indices for column values**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 235,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "           Length  Width\n",
      "Fish                    \n",
      "Angelfish    15.2    7.7\n",
      "Zebrafish     6.5    2.1\n",
      "Killifish     9.0    4.5\n",
      "Swordtail     6.0    2.0\n"
     ]
    }
   ],
   "source": [
    "df.set_index('Fish', inplace=True)\n",
    "print(df)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The left-most index column is no longer numeric. It has been replaced with species-names. We can now access the Angelfish and Swordtail columns by running `df.loc[['Angelfish', 'Swordtail']`.\n",
    "\n",
    "**Listing 8. 21. Accessing rows by string index**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 236,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "           Length  Width\n",
      "Fish                    \n",
      "Angelfish    15.2    7.7\n",
      "Swordtail     6.0    2.0\n"
     ]
    }
   ],
   "source": [
    "print(df.loc[['Angelfish', 'Swordtail']])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 8.5. Modifying Table Rows and Columns\n",
    "\n",
    "What will happen if we swap our rows and columns? We can find out by running `df.T`. The T stands for **transpose**. In a transpose operation, the elements of a table are flipped around its diagonal so that the rows and columns are switched.\n",
    "\n",
    "**Listing 8. 22. Swapping rows and columns**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 237,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fish    Angelfish  Zebrafish  Killifish  Swordtail\n",
      "Length       15.2        6.5        9.0        6.0\n",
      "Width         7.7        2.1        4.5        2.0\n"
     ]
    }
   ],
   "source": [
    "df_transposed = df.T\n",
    "print(df_transposed)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Each column now refers to an individual species of fish. Meanwhile, each row refers to a particular measurement type. Thus, calling `print(df_transposed.Swordtail)` will print out the swordtail’s length and width.\n",
    "\n",
    "**Listing 8. 23. Printing a transposed column**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 238,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Length    6.0\n",
      "Width     2.0\n",
      "Name: Swordtail, dtype: float64\n"
     ]
    }
   ],
   "source": [
    "print(df_transposed.Swordtail)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's try to modify our transposed table. We'll add the measurements of a clownfish to `df_transposed` by running `df_transposed['Clownfish'] = [10.6, 3.7]`.\n",
    "\n",
    "**Listing 8. 24. Adding a new column**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 239,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fish    Angelfish  Zebrafish  Killifish  Swordtail  Clownfish\n",
      "Length       15.2        6.5        9.0        6.0       10.6\n",
      "Width         7.7        2.1        4.5        2.0        3.7\n"
     ]
    }
   ],
   "source": [
    "df_transposed['Clownfish'] = [10.6, 3.7]\n",
    "print(df_transposed)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Alternatively, we can assign new columns using the `df_transposed.assign` method. The method lets us add multiple columns by passing in more than one column name.\n",
    "\n",
    "**Listing 8. 25. Adding multiple new columns**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 240,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fish    Angelfish  Zebrafish  Killifish  Swordtail  Clownfish  Clownfish2  \\\n",
      "Length       15.2        6.5        9.0        6.0       10.6        10.6   \n",
      "Width         7.7        2.1        4.5        2.0        3.7         3.7   \n",
      "\n",
      "Fish    Clownfish3  \n",
      "Length        10.6  \n",
      "Width          3.7  \n"
     ]
    }
   ],
   "source": [
    "df_new = df_transposed.assign(Clownfish2=[10.6, 3.7], Clownfish3=[10.6, 3.7])\n",
    "assert 'Clownfish2' not in df_transposed.columns\n",
    "assert 'Clownfish2' in df_new.columns\n",
    "print(df_new)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Our newly added columns are redundant. We'll delete these columns by calling `df_new.drop(columns=['Clownfish2', 'Clownfish3'], inplace=True)`.\n",
    "\n",
    "**Listing 8. 26. Deleting multiple columns**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 241,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fish    Angelfish  Zebrafish  Killifish  Swordtail  Clownfish\n",
      "Length       15.2        6.5        9.0        6.0       10.6\n",
      "Width         7.7        2.1        4.5        2.0        3.7\n"
     ]
    }
   ],
   "source": [
    "df_new.drop(columns=['Clownfish2', 'Clownfish3'], inplace=True)\n",
    "print(df_new)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Lets utilize our stored measurements in order to compute the surface area of each fish. To find the areas, we must iterate over the values in every column, by executing `df_new.items()`. \n",
    "\n",
    "**Listing 8. 27. Iterating over column values**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 242,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Area of Angelfish is 91.92300104403735\n",
      "Area of Zebrafish is 10.720684930375171\n",
      "Area of Killifish is 31.808625617596654\n",
      "Area of Swordtail is 9.42477796076938\n",
      "Area of Clownfish is 30.80331596844792\n"
     ]
    }
   ],
   "source": [
    "areas = []\n",
    "for fish_species, (length, width) in df_new.items():\n",
    "    area = math.pi * length * width / 4\n",
    "    print(f\"Area of {fish_species} is {area}\")\n",
    "    areas.append(area)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's add the computed areas to our table. We can augment a new Area row by executing `df_new.loc['Area'] = areas`. Afterwards, we'll need to run `df_new.reindex()` to update the row indices with the added Area name.\n",
    "\n",
    "**Listing 8. 28. Adding a new row**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 243,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fish    Angelfish  Zebrafish  Killifish  Swordtail  Clownfish\n",
      "Length  15.200000   6.500000   9.000000   6.000000  10.600000\n",
      "Width    7.700000   2.100000   4.500000   2.000000   3.700000\n",
      "Area    91.923001  10.720685  31.808626   9.424778  30.803316\n"
     ]
    }
   ],
   "source": [
    "df_new.loc['Area'] = areas\n",
    "df_new.reindex()\n",
    "print(df_new)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 244,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Our table contains 3 rows and 5 columns\n"
     ]
    }
   ],
   "source": [
    "row_count, column_count = df_new.shape\n",
    "print(f\"Our table contains {row_count} rows and {column_count} columns\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Our updated table contains 3 rows and 5 columns. We can confirm this using `df_new.shape`.\n",
    "\n",
    "**Listing 8. 29. Checking table shape**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 245,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      ",Angelfish,Zebrafish,Killifish,Swordtail,Clownfish\n",
      "Length,15.2,6.5,9.0,6.0,10.6\n",
      "Width,7.7,2.1,4.5,2.0,3.7\n",
      "Area,91.92300104403735,10.720684930375171,31.808625617596654,9.42477796076938,30.80331596844792\n",
      "\n"
     ]
    }
   ],
   "source": [
    "df_new.to_csv('Fish_measurements.csv')\n",
    "with open('Fish_measurements.csv') as f:\n",
    "    print(f.read())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Saving and Loading Table Data\n",
    "We've finished making changes to the table. Let's store the table for later use. Calling `df_new.to_csv('Fish_measurements.csv')` will save the table to a CSV file.\n",
    "\n",
    "**Listing 8. 30. Saving a table to a CSV file**\n",
    "\n",
    "The CSV file can be loaded into Pandas using the `pd.read_csv` method. Calling `pd.read_csv('Fish_measurements.csv', index_col=0)` will return a data frame containing all our table information. The optional `index_col` parameter will specify which column holds the row-index names\n",
    "\n",
    "**Listing 8. 31. Loading a table from a CSV file**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 246,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "        Angelfish  Zebrafish  Killifish  Swordtail  Clownfish\n",
      "Length  15.200000   6.500000   9.000000   6.000000  10.600000\n",
      "Width    7.700000   2.100000   4.500000   2.000000   3.700000\n",
      "Area    91.923001  10.720685  31.808626   9.424778  30.803316\n",
      "\n",
      "Row index names when column is assigned:\n",
      "['Length' 'Width' 'Area']\n",
      "\n",
      "Row index names when no column is assigned:\n",
      "[0 1 2]\n"
     ]
    }
   ],
   "source": [
    "df = pd.read_csv('Fish_measurements.csv', index_col=0)\n",
    "print(df)\n",
    "print(\"\\nRow index names when column is assigned:\")\n",
    "print(df.index.values)\n",
    "\n",
    "df_no_assign = pd.read_csv('Fish_measurements.csv')\n",
    "print(\"\\nRow index names when no column is assigned:\")\n",
    "print(df_no_assign.index.values)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 8.7. Visualizing Tables Using Seaborn\n",
    "\n",
    "Some numeric tables are too large to be viewed as printed output. Such tables are more easily displayed using heatmaps. A **heatmap** is graphical representation of a table, in which numeric cells are colored by value.  The easiest way to create a heatmap is to use the external Seaborn library. Lets now install Seaborn, and import it as `sns`.\n",
    "\n",
    "**Listing 8. 32. Importing the Seaborn library**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 247,
   "metadata": {},
   "outputs": [],
   "source": [
    "import seaborn as sns"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now, we’ll visualize our data frame as heatmap by calling sns.heatmap(df).\n",
    "\n",
    "**Listing 8. 33. Visualizing a heatmap using Seaborn**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 248,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.heatmap(df)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can alter that color-pallet within the heatmap plot by passing in a `cmap` parameter. Below, we'll execute `sns.heatmap(df, cmap='YlGnBu')`. This will create a heatmap where the color-shades transition from yellow to green, and then to blue.\n",
    "\n",
    "**Listing 8. 34. Adjusting heatmap colors**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 249,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.heatmap(df, cmap='YlGnBu')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Within the updated heatmap, the color-tones have flipped. Now, lighter colors correspond to higher measurements. We can confirm this by annotating the plot with the actual measurement values. \n",
    "\n",
    "**Listing 8. 35. Annotating the heatmap**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 250,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.heatmap(df, cmap='YlGnBu', annot=True)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The Seaborn library is built on top of Matplotlib. Consequently, we can use Matplotlib commands to modify elements of the heatmapt. For example, calling `plt.yticks(rotation=0)` will rotate the y-axis measurement labels. \n",
    "\n",
    "**Listing 8. 36. Rotating heatmap labels using Matplotlib**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 251,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.heatmap(df, cmap='YlGnBu', annot=True)\n",
    "plt.yticks(rotation=0)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Finally, we should note that running `sns.heatmap(df.values)` will also create a heatmap plot. However, the y-axis and x-axis labels will be missing from that plot. In order to specify the labels, we will need to set the  `xticklabels` and `yticklabels` parameters within  the `sns.heatmap` method.\n",
    "\n",
    "**Listing 8. 37. Visualizing a heatmap from a NumPy array**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 252,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXMAAAD4CAYAAAAeugY9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nO3dd5xU1fnH8c+zu4AgHQURlA4qKCuiURBFURQ1EQUbFiyRJLZIYqFobInERANiwWCDYEEjEg12ERQsKE0BsVGMBRGlSRHY3ef3x73Lb8DdnZnd2Z2Z6/f9et3X3jn33HOfu3f2mTPnnpk1d0dERLJbTroDEBGRilMyFxGJACVzEZEIUDIXEYkAJXMRkQjIS3cAqfDN5mcjNyWnQfWm6Q4h5Qp8c7pDqBTVcmqlO4RK8WPh2nSHUCnqVjvGKrJ/zb3PSjjfbP7f4xU6VjLUMxcRiQAlcxGRJJjlJLwk1p793swWmtkiM7syLGtoZq+Y2afhzwbx2lEyFxFJQo7lJbzEY2adgIuBQ4DOwElm1hYYAkx193bA1PBx2XFV6KxERH5mUtwz3xeY5e6b3L0AeB04FTgZGB/WGQ/0jdeQkrmISBLMLJllkJnNjlkG7dTcQqCHmTUys1rACcBeQBN3XxHW+QZoEi+uSMxmERGpOon3gd19LDC2jO2Lzew24GVgIzAfKNypjptZ3Bk06pmLiCQh1TdA3f1Bdz/I3Y8A1gCfACvNrGlwPGsKfBuvHSVzEZEkVMJslsbhz70JxssfA54FBoZVBgLPxGtHwywiIklIZJZKkiaZWSNgG3Cpu681s78CT5rZRcDnwOnxGlEyFxFJQqI97kS5e48Syr4HeiXTjpK5iEgSUp3MU0XJXEQkCUaVfd1KUpTMRUSSoJ65iEgE5ORkZtrMzKhERDKWeuYiIllPwywiIhGgZC4iEgGmYRYRkeynnrmISATk5OSmO4QSKZmLiCRBwywiIhGgYRYRkQhQMhcRiQANs4iIRIDp4/wiItnPTN+aKCKS9TTMIiISAboBKiISBRpmERGJgMzsmCuZi4gkJSczs7mSeSn+esOTvP3GhzRoWJtxk64C4OExLzPl6VnUb7ArABdf3odDe+ybzjCTsn79Rm780wN89umXmBk3//liOue32779vXc/5PeXjaRZs90B6HXswfz2klPSFW65PTbhVSY/NQN355T+R3D2ecekO6SUWL9+Izdefz+fbr9+g8g/sF38HTPMzddNYOYbC2nQsA5P/Oc6AF59aS5j732O5UtXMu7xq9mvU4s0R1mGzMzl8ZO5mW1w99qVFYCZnQ+87O5fh4+XA13d/bvKOmYi+vyqK6ee2Y1br5u4Q/lp5/TgzIE90xNUBd02YgLdDz+Af4z6Pdu2FrD5xy0/qdPloA7cPeaqNESXGp99+hWTn5rBvyYOo1q1PC77zZ30OPIA9m7RON2hVdhtt06g++Gd+cedV5Z6/bLBSX0P5fQBR3LDsH9tL2vTdk/+NmoQI256PI2RJcYzdMw8E15jzgf2THcQO+t8UGvq1K2V7jBS5ocfNjFn9sec2q8nANWq51G37q7pDaoSLFu6gk4HtKJmzRrk5eVyUNf2vPbq3HSHVWHB9fuIU/v3BLL7+nXp2o669XaMvVWbPWjZqkmaIkqSJbFUoXINs5jZ7sB9wN5h0ZXu/qaZ3RiWtQ5/jnL30eE+1wPnAKuAL4A5wHKgK/ComW0GDgvbu9zMfglUA05z94/KE2dlmDzxLV6aMocO++3FpX88KWsS/ldfrqJhwzpcP3wsn3z0P/bt2JJrh55LrVq77FDv/fmf0f+UYey+e33+ePUA2rZrnqaIy6dN22bcc+dk1q7dQI0a1Zg5YwH7dczgt+wJ+urLb2nQsA7XDfsnn3z8P/bbrxXXDvvp9ZMqkBOtnvmdwEh3PxjoBzwQs20f4DjgEOAGM6tmZsX1OgN9CBI47v4UMBs4293z3X1z2MZ37t4FGANkzHv+k08/jMemDOHBJwbTaLc63HPHlHSHlLDCwkIWf7ic08/oxZNP/4WaNWvw0AP/3aHOvvu15KVXR/HU5FsZcHZvrrx8ZJqiLb/WbZpy/kXHc8nFI7nsN3fSYZ+9yMnQG1bJKCwsYvGHyznjzGP499O3UrNWDR68/7/xd5TUM0t8qULlfZYfA9xtZvOBZ4G6ZlY8rv6cu28Jx7y/BZoA3YFn3P1Hd/8BiPcsfDr8OQdoWVIFMxtkZrPNbPaEB18q52kkp2GjOuTm5pCTk8NJp/6Cjxb+r0qOmwpNmjSkSZOGHNC5LQDH9j6ExR8u36FO7dq1qLVr0NPrcWQ+BQWFrFnzQ1WHWmF9+/XgsX9fz4P/uoY6dWvRomWWvH0vQyLXT6pIriW+VKHyJvMc4NCwN53v7s3cfUO4LfauTCHlG8opbqPU/d19rLt3dfeu5150XDkOkbzvV63fvj7jtYW0artHlRw3FXbbvT5N9mjIsmVfAzDrnUW0btNshzrfrVqLuwOw4IMlFBU59etX2r3vSrP6++A6rfj6e6a9Oo8+J/4izRFV3G6712ePpo12uH5t2jaLs5dUihT2zM2sg5nNj1nWm9mVZnajmX0VU35CvLbKOzXxZeBy4O9hQPnuPr+M+m8C/zSzEeExTwLGhtt+AOqUM45Kc9OQR5k/ewnr1m6kf+8/c8HvejNv9hI++/hrzGCPPRty1XX90h1mUoYOH8jQa8awbVsBzZs35pa/DOLJiVMBOP3MXrzy8rs8OXEquXm51KhRjb/dcWnGfqlQWa66cgzr1m4kLy+Xa68bkDX3NeIZOvw8hlx9b3D99mrMLX/5TbpDKpfhVz/EnPc+Ze3aDZzYaziDLjmRuvVqcfuIf7Nm9QYGXzKG9vs0566xl6U71JKl8E/C3T8G8gHMLBf4CpgMXEAwlH17wmEV98RKrWBWBHwdU/QP4F/APcC+BMn5DXf/bXgDdENxAGa2EDjJ3ZeH2wYAKwmGX1509/vNrB9wK1B8A3Qx4dREM+sK3O7uPcuK8ZvNz5Z9ElmoQfWm6Q4h5Qq23xKJlmo50Xix2NmPhWvTHUKlqFvtmAql43bHP5Rwvvn0xQsTPpaZ9QZucPfuO+fSRMTtmbt7aUMxZ5RQ98adHneKeXi7u99oZrWANwjGw3H3ScCkmHotY/afDfSMF6OISJVJ4qXAzAYBg2KKxrr72FKqnwnETrS/zMzOI5gk8kd3X1PWsaryNv/Y8IbpXGCSu2f/5F8R+dnx3JzEl5h7e+FSYiI3s+rAr4B/h0VjgDYEQzArgDvixVVlH+d39wFVdSwRkUpTObeR+gBz3X0lQPFPADO7H4g7Dzr7J+CKiFSlyplnfhYxQyxmFnvT7BRgYbwG9EVbIiLJSPEnQM1sV+BYIHZ60t/MLB9wgk/Kx526pGQuIpKMFA+zuPtGoNFOZecm246SuYhIMjL0sxdK5iIiyajij+knSslcRCQZ6pmLiERAZuZyJXMRkWR4hn6fuZK5iEgyNMwiIhIBmZnLlcxFRJKSm5kfnFcyFxFJhnrmIiIRoBugIiIRoGQuIpL9PDNzuZK5iEhSdANURCQCNMwiIhIBmdkxVzIXEUmKPgEqIhIBGmYREcl+rp65iEgE5CmZi4hkP/XMRUQiQGPmIiIRkJm5XMlcRCQZ+k9DIiJRoGQuIhIBuUrmlaZetd3SHULK1citl+4QUi63qHq6Q6gUeTk10x1CpcizaJ5XhWk2i4hIBGToMEuGfmWMiEiGyrHElwSYWX0ze8rMPjKzxWZ2mJk1NLNXzOzT8GeDuGFV+MRERH5G3CzhJUF3Ai+6+z5AZ2AxMASY6u7tgKnh4zIpmYuIJCPXEl/iMLN6wBHAgwDuvtXd1wInA+PDauOBvvHaUjIXEUlGaodZWgGrgIfNbJ6ZPWBmuwJN3H1FWOcboEncsMp9QiIiP0dJJHMzG2Rms2OWQTu1lgd0Aca4+4HARnYaUnF3BzxeWJrNIiKSjCQms7j7WGBsGVW+BL5091nh46cIkvlKM2vq7ivMrCnwbbxjqWcuIpIEz7GEl7htuX8DfGFmHcKiXsCHwLPAwLBsIPBMvLbUMxcRSUbqPzR0OfComVUHlgIXEHS0nzSzi4DPgdPjNaJkLiKSjBR/nN/d5wNdS9jUK5l2lMxFRJKQk6GD00rmIiJJyNCvZlEyFxFJhpK5iEgEWIZmcyVzEZEkaMxcRCQCTMlcRCT7Zegoi5K5iEgyMvR/UyiZi4gkQz1zEZEIUDIXEYmAnBR/nD9VlMxFRJKgnrmISAQomYuIRICSuYhIBGhqoohIBKhnLiISAZrNIiISAeqZi4hEgJK5iEgEKJmLiESAZrOIiERATm66IyiZkvlOli9bwTV/HLP98VdfruJ3l53COef13l427qEXeH7K2wAUFhaxbOnXTJsxmnr1a1d5vIlasWIV11wzku+/X4sZnH768Qwc+Ksd6ixZ8gXDht3JokVLGDz4XC666NQ0RZucwsIiTj9tCE0aN+Te+4bssG3y5Onc8fcJNG7SEIABA46n/2m90hFmhSRy/TLdli1bOfec69i6dRsFhUUc1/swLr/izB3qjBjxEO/OWgjA5s1bWL16He++90g6wi1VpIZZzGwk8Lm7jwofvwR84e6/Dh/fAXwPdHH3/iXsPx24yt1nm9kwd781LG8JTHH3TuWJKxVatmrKk0/fDARJovdRgzn6mC471Dn/wj6cf2EfAF6fNp9H/vVSRidygNzcXIYMuZCOHduyYcMm+vUbTPfu+bRtu/f2OvXr12H48EFMnfpOGiNN3oQJz9O6dTM2bthc4vbj+3TjuusvquKoUiuR65fpqlevxsPjbmLXXWuybVsB55w9nB5HHEh+foftdYYOvXD7+iMTnmPx4mXpCLVMmfo/QMv7D5DeBLoBmFkOsBvQMWZ7N+C1khJ5CYaVM4ZKN+udD2m+V2P23HO3Uuu88Pw7HH/CoVUYVfk0btyQjh3bAlC7di1at96LlSu/36FOo0b1OeCA9uTlZc8btm+++Z43Xp9Lv/7Z19tORiLXL9OZGbvuWhOAgoJCthUUlJkYn3tuJieceHhVhZcws8SXqlTeZP4WcFi43hFYCPxgZg3MrAawL7DazBYCmFlNM5toZovNbDJQMyz/K1DTzOab2aNhe7lmdr+ZLTKzl82sZnlPrqJeemEWfU74RanbN2/ewlszF3LMsQdVYVQV9+WXK1m8eAmdO3eIXznD/XXEOP541TnklHFX6pWXZ3HKyVdx5e/vYMWK76owusqRzdevsLCQU/r+gcO7X0C3bp3p3Ll9ifW++upbvvxqJYceun8VRxhfpJK5u38NFJjZ3gS98LeBWQQJviuwANgas8vvgE3uvi9wA3BQ2M4QYLO757v72WHddsA97t4RWAv0KykGMxtkZrPNbPaD9z9TntMo07atBbw+bT7HHndwqXXemD6f/APbZvwQS6yNGzdzxRUjGDbsYmrXrpXucCpk+rQ5NGxYj44dW5da56ieB/HK1HuY/MztdOt2AMOG3lOFEaZetl+/3NxcJv/nH0ybfj8LPviMTz75vMR6zz8/k+N6H0ZububdbczUZF6R99NvESTybsA/gGbh+jqCYZhYRwCjAdz9AzP7oIx2l7n7/HB9DtCypEruPhYYC7C54C0v3ymUbubMD9hnvxY02q1eqXVefOFdji+j555ptm0r4IorRvDLX/akd+9u6Q6nwubN+5jp02Yz4415bNm6lY0bNnPtNaO57W9XbK9Tv0Gd7ev9+vfijtsz62ZaMqJ0/erW3ZVDftGJmTPm0b59i59sf+H5N7n++ovTEFl8eeUdz6hkFQmreNx8f4JhlncIeubdCBJ9eW2JWS8kTTNuXnx+VpmJ+ocfNjHnvY856ugupdbJJO7O8OGjad16Ly64oG+6w0mJwX8YwGvT7+OVqfdw+x1X8otfdNohkQOs+nbN9vVpr82mdevmVR1mSkTh+q1evY716zcC8OOPW3j7rfdpVcL1WLr0S9at20D+gZk5jJRjnvCSKDPLNbN5ZjYlfDzOzJaFQ9DzzSw/XhsV7ZlfBSx190KCMfL6BGPoFwOxYw9vAAOA18ysE3BAzLZtZlbN3bdVIJaU2rxpC++8tYjrbhi4vezfT0wD4LQzjgLgtVfnclj3jtSsVSMtMSZrzpwPeeaZabRv35KTTw4S3h/+cB5ff70KgLPO6sOqVWvo128wGzZsIicnh/Hjn+X55+/Nurfzd41+go6d2nD00V155JEXmPbabHLzcqlXrzZ/GXFJusMrl9Ku35FHdk1zZIlbtWoNQ4fcRWFhEUVexPHHd+eoo7oyevTjdOrUhqOPPgSA58Mbnxk7a6Rywvo9sBioG1N2tbs/lWgD5l6+EQozywXWAKPd/bqwbBxwmLt3iJ1mGN7EfBjoHAbcDLg0nJp4G/ArYC4wnJipiWZ2FVDb3W8sK5bKGGZJt5p5pc+gyVYFRSVPHcx2eTlpu0dfqYoyp3+VUjnWsULp+MSXZyacb57rfXjcY5lZc2A88BfgD+5+UphLp1RJMs8kSubZQck8uyiZl+yXr8xION9M6X3Eb4BBMUVjw/t925nZU8AIoA7B52+Kk/lhBMPOU4Eh7h47BP0TGTqULyKSmXIs8cXdx7p715hl50R+EvCtu8/Z6TBDgX2Ag4GGwLXx4sqeT4eIiGSAvNSOmXcHfmVmJwC7AHXN7BF3PyfcvsXMHia4P1km9cxFRJJg5gkv8bj7UHdv7u4tgTMJPjl/jpk1DY5lBvQlmDFYJvXMRUSSUEVfgfuome0OGDAf+G28HZTMRUSSUFnDGe4+HZgerh+d7P5K5iIiSUjmw0BVSclcRCQJKb4BmjJK5iIiSdC/jRMRiQANs4iIRIB65iIiEZCpH85RMhcRSYKGWUREIiBT/zmFkrmISBIyNJcrmYuIJEPDLCIiEaDZLCIiEaBhFhGRCFDPXEQkAnJzNGYuIpL1NMwiIhIBms0iIhIBGjMXEYkAJXMRkQiopmEWEZHsp565iEgEKJmLiERArpK5iEj2U89cRCQCNM9cRCQCqqlnXnkatr4r3SGk3MolF6U7hJSbuKQw3SFUigFtaqQ7hEoxafmWdIdQKQa261ih/TXMIiISAZk6zJKp3xkjIpKRci3xJR4z28XM3jWz981skZndFJa3MrNZZvaZmT1hZtXjtaVkLiKShBxLfEnAFuBod+8M5APHm9mhwG3ASHdvC6wB4o67KpmLiCQhLyfxJR4PbAgfVgsXB44GngrLxwN947WlZC4ikoRc84QXMxtkZrNjlkE7t2dmuWY2H/gWeAVYAqx194KwypdAs3hx6QaoiEgSkukBu/tYYGycOoVAvpnVByYD+5QnLiVzEZEkVNbURHdfa2bTgMOA+maWF/bOmwNfxY2rcsISEYmmVN4ANbPdwx45ZlYTOBZYDEwD+ofVBgLPxGtLPXMRkSTkpnaeeVNgvJnlEnSun3T3KWb2ITDRzP4MzAMejNeQkrmISBISmaWSKHf/ADiwhPKlwCHJtKVkLiKSBH2cX0QkAvR95iIiEZCp382iZC4ikoRMnQKoZC4ikgSNmYuIREC1HA2ziIhkPfXMRUQiQMlcRCQCdANURCQCTD1zEZHsp2EWEZEI0DCLiEgEmD4BKiKS/TJ0lEXJXEQkGboBKiISARmay5XMRUSSoa/AFRGJAA2ziIhEQIbmciVzEZFkKJmLiESAPgGahS698HguOOtozIyHH3+Nux98gVuHDeCEY7qwdVshyz5fyaCr7mPd+k3pDjVhN183gZlvLKRBwzo88Z/rAHj1pbmMvfc5li9dybjHr2a/Ti3SHGVyCrZu44lhd1K4rYCiwiLadcun+4ATeO6O8az87Aty8nLZo93eHHvJmeTm5aY73IQ8NmEq/5k0E3fnlP6HM+DcY0qst2jBci445zZu/fuvOab3QVUcZfIKtm5jwrXhtSoqYp/u+Rxx9gnM/u8bvPfsdNas+I4rH72VWvVqpzvUUmVoLq+cT6aaWV8zczPbpzLarwr7tW/OBWcdTY9fXschx11Ln14H0rpFE6bOWMBBx17DIcddy6fLVnD1pSenO9SknNT3UEbfd+kOZW3a7snfRg3iwIPapimqismtlsdpt1zOeXcO4dxR17J87mK+/ngZ+x7ZlQvuHc7A0UMo2LqNBa+8le5QE/LZp1/xn0kzGf/4UB6fdD0zXl/AF//79if1CguLGD3yaQ7ttl8aoiyf3Gp5nH3r5fz67iFcNPpals5ZzFcfLaP5fq0468+XUq9xw3SHGFeOecJLlcZVSe2eBcwMf+7AzLLi3cA+7Zrx3rzP2PzjVgoLi5jxzmL69jmEqTMWUFhYBMC7cz+l2R6Z/+SL1aVrO+rW23WHslZt9qBlqyZpiqjizIzqNWsAUFRYSFFhIYbRumtHzAwzo2m7Fmz4bl2aI03MsqXf0Gn/VtSsWZ28vFy6dG3Pa6/O+0m9Jx57jV7HHkiDhnXSEGX57HCtCgopLCwEM/Zosxf1mzRKc3SJMUt8qUopT+ZmVhs4HLgIODMs62lmM8zsWeDDsOwcM3vXzOab2T/NLDcsH2Nms81skZndlOr4ErXo4y/ofsg+NKxfm5q7VOf4o/Jp3nTHJ9t5Z/TkpenvpylCiVVUWMS/rryNMecNo0V+B5p2aLl9W2FBIR9Of4+WXfZNX4BJaNt2T+bN/ZS1azewefNW3pyxgJXfrN6hzrcr1zBt6nz6n3FkmqIsv6LCIh64/DZGnTOMVvkdaBZzrbJBThJLVaqMXvLJwIvu/omZfW9mxQN5XYBO7r7MzPYFzgC6u/s2M7sXOBv4FzDc3VeHyX2qmR3g7h9UQpxl+vizr7ljzLP899GhbNq0hfc//JzCoqLt26+5rC+FBUVMnDyzqkOTEuTk5nDeqGv5ccMmnh3xAN99/jW7tdgTgKn3PUnzjm1o3rFNmqNMTKs2TRl44XFcOuhOatasTvsOe5GTs2NquP22J7li8Kk/Kc8GObk5/Pqu4Fo99ZcH+Hb51zRuuWe6w0rYz2me+VnAneH6xPDxFOBdd18WlvcCDgLes+A3UxMoHhQ83cwGhbE1BfYDfpLMwzqDAPIadCWvdurHe8c/MZ3xT0wH4KZrzuCrFUHv6Jz+R3BCrwPpc9ZfUn5MqZhdatdir/3bsWzuYnZrsSdvTXyBTes3cPIlF6U7tKT07Xc4ffsdDsDdoybTeI8GO2xfvOhzhl79AABr12zgzRkLyc3N5ahe+VUea3ntUrsWLQ5ox9K5i7Mrmac7gFKkNJmbWUPgaGB/C74nMhdw4DlgY2xVYLy7D91p/1bAVcDB7r7GzMYBu5R0LHcfC4wFqLn3WZVyp2H3RnVZ9f169tqzEScffzBH9v0Txx7ZmT/87pf0Pu1mNv+4tTIOK0natO4HcnJz2aV2LbZt2crn73/Mwacewwcvv8XyuYs57ZbLsCzrwa7+fj0NG9VlxYrVvDZ1HuMfHbLD9v++dOv29RuGj6PHkftnRSLfuO4HcmOu1bJ5H3NY/5Jn6mSqVE5NNLOHgJOAb929U1h2I3AxsCqsNszdn4/XVqp75v2BCe7+m5hgXwd67FRvKvCMmY1092/DF4E6QF2CpL/OzJoAfYDpKY4xYY//czANG9Rm27ZCrrz+Ydat38TIW86nRvVqTHl0GADvzvuMK4Y9mK4Qkzb86oeY814wHntir+EMuuRE6tarxe0j/s2a1RsYfMkY2u/TnLvGXpbuUBO2cc16Xhj1CF7kuDsduufT5uBO/OOUK6nbuAGPXzsSgHaHHsBhZ/ZJc7SJuXrwP1m3diN5ebkMGX4WderW4qknXgfIynHyYhtXr+e/Ix+hqMjxImffHvm0O6QT7z37Ou9MepUNa37ggcv/Spuu+3HiFQPSHW6JUjzPfBxwN8EQc6yR7n57Mg2Ze+o6tWY2DbjN3V+MKbsC+B2wxN1Piik/AxhKcJ9gG3Cpu78T9sa7AV8A64Bn3X1cWcetrJ55Oq1ckl3DAomYuKQw3SFUigFtaqQ7hEoxafmWdIdQKQa2O65C6XjFpv8mnG+a1vpl3GOZWUtgyk498w3JJvOU9szd/agSykYDo0sofwJ4ooTy81MZk4hIKiXzn4Zi7+2FxoZDxPFcZmbnAbOBP7r7mng7ZNdAoohImlkSi7uPdfeuMUsiiXwM0AbIB1YAdyQSV1Z8gEdEJFNU9tREd1/5/8ey+wlmA8alZC4ikoTK/nYfM2vq7ivCh6cACxPZT8lcRCQJqeyZm9njQE9gNzP7ErgB6Glm+QTTupcDvym1gRhK5iIiSUldNnf3n3x/FVCuuc5K5iIiSbAM/QyokrmISBLMMnMSoJK5iEhS1DMXEcl6lqEfz1EyFxFJgoZZREQiQcMsIiJZT7NZREQiQMlcRCQCwn9XnHGUzEVEkqKeuYhI1tMwi4hIJGhqoohI1lPPXEQkAqyy/ztFOSmZi4gkwSr931OUj5K5iEhS1DMXEcl6GmYREYkEJXMRkaynr8AVEYkE9cxFRLJejr7PXEQkCpTMRUSynj4BKiISCUrmIiJZT/PMRUQiIFM/zm/unu4YsoqZDXL3semOI5WieE4QzfOK4jlBdM+rKmXmbdnMNijdAVSCKJ4TRPO8onhOEN3zqjJK5iIiEaBkLiISAUrmyYviuF4UzwmieV5RPCeI7nlVGd0AFRGJAPXMRUQiQMlcRCQCIpvMzayvmbmZ7VMJbfc0synheg0ze9XM5pvZGWb2gJntV8a+082sazmOeUp4jNilyMz6lFK/pZktTPY4O7Wxu5nNMrN5ZtbDzJ43s/pl1F9uZrtV5JgxbW2IWT/BzD4xsxZm9lszOy8sH2dm/cP17b/X2DjN7AozW2xmj5rZr8xsSBnHPN/M7k5F/GF7w81skZl9EF6vX6Sq7RKOtSH82dLMBiRQf08zeypc3/58jrPPHmY20cyWmNmc8PfcvqLPszjH7BH+DuebWbPimEupW+HnfDaL8idAzwJmhj9vqMTjHAjg7vnh4ycq4yDuPhmYXPzYzAYBZwMvVaRdM8t198JSNvcCFrj7r8PHMypyrPIws17AaOA4d/8cuC/ePu5+QszDS8AjizsAAAd6SURBVIBj3P3L8PGzqY/yp8zsMOAkoIu7bwlf5KqnqO08dy8oZXNLYADwWFltuPvXQP8kjmkEz7/x7n5mWNYZaJJoG+V0NjDC3R8JHycc889NJHvmZlYbOBy4CCh+4vUMe29PmdlHYU/Nwm0nhGVzzGx0TK97VzN7yMzeDXunJ+90nMbAI8DBYc+hTXEP0cxyw57jQjNbYGaDY3Y9LWzzEzPrUY7zaw/8CTjX3YvM7Gozey/sAd4UUzUvPM/F4XnXCvdfbma3mdncMJaLw/3fN7NJZlbLzPKBvwEnh+dWs7jnHf5engvrLzSzM2KOebmZzQ3PuULviszsCOB+4CR3XxKW3WhmV8XZrzjO+4DWwAtmNji2521mp4Wxv29mb8TsvqeZvWhmn5rZ3yoQflPgO3ffAuDu3wHNzOzp8Pgnm9lmM6tuZruY2dKwPN/M3gmv5WQzaxCWTzezUWY2G/i9mbUys7fD3/OfY477V6BHeM0Gh73VGeE1mWtm3cL2ku3FHgVsc/ftL6bu/j7wRfHj8DweDmOaZ2ZHheXPmdkB4fo8M/tTuH5z+Nwr8W/TzH4NnA7cEpZtj9nMOoZ/Q/PD31W7MIxcM7vfgt78y2ZWM4lzzG7uHrmF4NX8wXD9LeAgoCewDmhO8CL2NkHC34XgCdkqrP84MCVcvxU4J1yvD3wC7Bq2VVxn+3r4eDrQNTzmKzHl9WO23xGunwC8muS5VQNmA2eEj3sTTOuy8LymAEcQ9NAc6B7Wewi4KlxfDlwT02ajmPU/A5eH6+cDd8dsWw7sBvQD7o8prxezvXjfS4AHKnANtwGrgQN2Kr8x5jzGAf1jf++xcZawvv18gAVAs52uzfnAUqBe+Lz4HNirnPHXBuaHz5l7gSMJ3gkvDbffDrwHdA+3PR6WfwAcGa7fDIyKOb97Y9p/FjgvXL8U2FDK87EWsEu43g6YHa63BBaWtE8p53MFMLKE8th2/gg8FK7vA/wv/D0OCWOsF57zS2GdaUAHSvnbLOEaxx7rLuDscL06UDPcXgDkh+VPEv79/hyWSPbMCYZWJobrE8PHAO+6+5fuXkTwh9aS4Em31N2XhXUej2mnNzDEzOYT/DHtAuydYAxLgdZmdpeZHQ+sj9n2dPhzThhDMm4BFrl78XBO73CZB8wlOJ/iXsoX7v5muP4IwYtXsdjhoE5h720BwQthxzgxLACODXv3Pdx9Xcy2ipxbrG0EL8QXVaCNsrwJjDOzi2GHb06a6u7r3P1H4EOgRXkad/cNBC/og4BVBL/vc4AlZrYvcAjwD4IX3h7ADDOrR/DC8nrYzPhwe7HYa9ad/3+uTigjlGrA/eG1/TdQ6v2cFDic4HmGu39E8GLYnmB47giCmJ8DaofvElu5+8fhviX9bZblbWCYmV0LtHD3zWH5MnefH65X9DmYVSI3Zm5mDYGjgf3NzAn+UJ3gSbQlpmoh8c/fgH4xT7jiY8QdJ3T3NRaMKR4H/Jbg7eKF4ebiOBKJIfa4PQl6xV12inGEu/9zp7otCc57h7Bi1jfGrI8D+rr7+2Z2PkFPqVTu/omZdSF4Z/FnM5vq7jeHm8t1biUoIvidTTWzYe5+awXa+gl3/60FNyRPBOaY2UHhpmSfI2Udo5CgEzA9TKYDgTeAPgQvVq8S/O5zgasTaHLjTo8T+ZDIYGAl0Jmg1/tjAvuUZBHlH69+j+Dd6lLgFYJ3dxcTJNtiSf3e3f0xM5tFcP2eN7PfhO3v3M7PZpglij3z/sAEd2/h7i3dfS9gGUHvpyQfE/SgW4aPY8d/XyIYAy4eWz8w0SAsuOGV4+6TgOvYMQEnLRw7fZjgrfUPO8V4oQX3CbDgjn/jcNveFtyIg+Cm2MxSmq8DrDCzagQ983ix7Als8uCm1N+p4LmVxt03Efyxnm1mKe2hm1kbd5/l7n8i6DnvleL2O8SM4wLkE/RUZwBXAm+7+yqgEcFQw8LwHc4a+//7KOcCr1OyNwnvB7HjNfuB4HoWqwesCHu850K5v7/1NaCGBTfeAQjHwWN/bzOKY7Hgvs7ewMfuvpVgKPM0gh71DOAqghe2cjGz1gTvqEcDzwAHlLetqIhcz5xgSOW2ncomAb8Dluxc2d03m9klwItmtpGgF1HsFmAU8IGZ5RC8KJyUYBzNgIfD/QCGJn4KJfot0BgYYzt+Of4IgpkLb4flGwjezhcSvFBdamYPEQwZjCml7euBWQRJbRY7JoOS7A/83cyKCHqYvyvH+STE3VeHw1RvmNmqFDb99zDZGjAVeJ8g4aZKbeAuC6ZIFgCfEQy5bCSYAVKcyD4A9vBwkJeg935fOAyxFLiglPZ/DzwWDjM8E1P+AVBoZu8T9PrvBSZZMJ3zRX7au0+Iu7uZnQKMCo/5I8H9iCtjqt1L8PxcEJ7z+R7eACZI4L3Cv7cZBOPjFZkddTpwrpltA74huL9VtwLtZT19nJ9g9ou7bwh74PcAn7r7yHTHJSKSqCgOs5THxeFNzkUEb0v/Gae+iEhGUc9cRCQC1DMXEYkAJXMRkQhQMhcRiQAlcxGRCFAyFxGJgP8D04d+Qm+03+IAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.heatmap(df.values, \n",
    "            cmap='YlGnBu', annot=True,\n",
    "            xticklabels=df.columns,\n",
    "            yticklabels=df.index)\n",
    "plt.yticks(rotation=0)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 9. Case Study 2 Solution\n",
    "\n",
    "## 9.1. Overview\n",
    "\n",
    "Our advertising data-table monitors ad-clicks across 30 different colors. Our aim is to discover an ad-color that generates significantly more clicks than blue.\n",
    "\n",
    "## 9.2. Processing the Ad-Click Table in Pandas\n",
    "Let’s begin by loading our ad-click table into Pandas. Afterwards, we’ll check the number of rows and columns in the table.\n",
    "\n",
    "**Listing 9. 1. Loading ad-click table into Pandas**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 253,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Table contains 30 rows and 41 columns\n"
     ]
    }
   ],
   "source": [
    "df = pd.read_csv('colored_ad_click_table.csv')\n",
    "num_rows, num_cols = df.shape\n",
    "print(f\"Table contains {num_rows} rows and {num_cols} columns\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Our table contains 30 rows and 41 columns. The rows should correspond to clicks-per-day and views-per-day associated with individual colors. Let’s confirm by checking the column names.\n",
    "\n",
    "**Listing 9. 2. Checking column names**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 254,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Index(['Color', 'Click Count: Day 1', 'View Count: Day 1',\n",
      "       'Click Count: Day 2', 'View Count: Day 2', 'Click Count: Day 3',\n",
      "       'View Count: Day 3', 'Click Count: Day 4', 'View Count: Day 4',\n",
      "       'Click Count: Day 5', 'View Count: Day 5', 'Click Count: Day 6',\n",
      "       'View Count: Day 6', 'Click Count: Day 7', 'View Count: Day 7',\n",
      "       'Click Count: Day 8', 'View Count: Day 8', 'Click Count: Day 9',\n",
      "       'View Count: Day 9', 'Click Count: Day 10', 'View Count: Day 10',\n",
      "       'Click Count: Day 11', 'View Count: Day 11', 'Click Count: Day 12',\n",
      "       'View Count: Day 12', 'Click Count: Day 13', 'View Count: Day 13',\n",
      "       'Click Count: Day 14', 'View Count: Day 14', 'Click Count: Day 15',\n",
      "       'View Count: Day 15', 'Click Count: Day 16', 'View Count: Day 16',\n",
      "       'Click Count: Day 17', 'View Count: Day 17', 'Click Count: Day 18',\n",
      "       'View Count: Day 18', 'Click Count: Day 19', 'View Count: Day 19',\n",
      "       'Click Count: Day 20', 'View Count: Day 20'],\n",
      "      dtype='object')\n"
     ]
    }
   ],
   "source": [
    "print(df.columns)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The columns are consistent with our expectations. As a sanity check, let’s examine the quality of data stored within our table. We’ll start by outputting the analyzed color-names.\n",
    "\n",
    "**Listing 9. 3. Checking color names**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 255,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['Pink' 'Gray' 'Sapphire' 'Purple' 'Coral' 'Olive' 'Navy' 'Maroon' 'Teal'\n",
      " 'Cyan' 'Orange' 'Black' 'Tan' 'Red' 'Blue' 'Brown' 'Turquoise' 'Indigo'\n",
      " 'Gold' 'Jade' 'Ultramarine' 'Yellow' 'Virdian' 'Violet' 'Green'\n",
      " 'Aquamarine' 'Magenta' 'Silver' 'Bronze' 'Lime']\n"
     ]
    }
   ],
   "source": [
    "print(df.Color.values)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "30 common colors are present in the Color column. We can confirm that the color blue is present by executing `assert\n",
    "'Blue' in df.Color`.\n",
    "\n",
    "**Listing 9. 4. Checking for blue color**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 256,
   "metadata": {},
   "outputs": [],
   "source": [
    "assert 'Blue' in df.Color.values"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's examine columns for the first day of the experiment; __Click Count: Day 1 __and __View Count: Day 1__. We'll select these 2 columns and use `describe()` to summarize their contents.\n",
    "\n",
    "**Listing 9. 5. Summarizing Day 1 of the experiment**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 257,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "       Click Count: Day 1  View Count: Day 1\n",
      "count           30.000000               30.0\n",
      "mean            23.533333              100.0\n",
      "std              7.454382                0.0\n",
      "min             12.000000              100.0\n",
      "25%             19.250000              100.0\n",
      "50%             24.000000              100.0\n",
      "75%             26.750000              100.0\n",
      "max             49.000000              100.0\n"
     ]
    }
   ],
   "source": [
    "selected_columns = ['Color', 'Click Count: Day 1', 'View Count: Day 1']\n",
    "print(df[selected_columns].describe())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The minimum and maximum values in _View Count: Day 1_ are both equal to 100 views. This behavior is expected. We had been specifically informed that each color receives 100 daily views. Let's confirm that all the daily views equal 100.\n",
    "\n",
    "**Listing 9. 6. Confirming equivalent daily views**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 258,
   "metadata": {},
   "outputs": [],
   "source": [
    "view_columns = [column for column in df.columns if 'View' in column]\n",
    "assert np.all(df[view_columns].values == 100) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "All view-counts equal 100. Therefore, all 20 _View Count_ columns are redundant. We can delete them from our table.\n",
    "\n",
    "**Listing 9. 7. Deleting view-counts from the table**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 259,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Index(['Color', 'Click Count: Day 1', 'Click Count: Day 2',\n",
      "       'Click Count: Day 3', 'Click Count: Day 4', 'Click Count: Day 5',\n",
      "       'Click Count: Day 6', 'Click Count: Day 7', 'Click Count: Day 8',\n",
      "       'Click Count: Day 9', 'Click Count: Day 10', 'Click Count: Day 11',\n",
      "       'Click Count: Day 12', 'Click Count: Day 13', 'Click Count: Day 14',\n",
      "       'Click Count: Day 15', 'Click Count: Day 16', 'Click Count: Day 17',\n",
      "       'Click Count: Day 18', 'Click Count: Day 19', 'Click Count: Day 20'],\n",
      "      dtype='object')\n"
     ]
    }
   ],
   "source": [
    "df.drop(columns=view_columns, inplace=True)\n",
    "print(df.columns)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Our remaining 20 _Click Count_ columns correspond to number of clicks per 100 daily views. We can treat these counts as percentages. Let's summarize the percentage of daily ad-clicks for blue ads. \n",
    "\n",
    "**Listing 9. 8. Summarizing daily blue-click statistics**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 260,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "count    20.000000\n",
      "mean     28.350000\n",
      "std       5.499043\n",
      "min      18.000000\n",
      "25%      25.750000\n",
      "50%      27.500000\n",
      "75%      30.250000\n",
      "max      42.000000\n",
      "Name: Blue, dtype: float64\n"
     ]
    }
   ],
   "source": [
    "df.set_index('Color', inplace=True)\n",
    "print(df.T.Blue.describe())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "On average, 28.35% of blue ads receive a click per every view. How does this average compare to the other 29 colors? We are ready to find out.\n",
    "\n",
    "## 9.3. Computing P-values from Differences in Means\n",
    "\n",
    "Let’s start by filtering the data. We’ll delete blue, leaving behind the other 29 colors. Afterwards, we’ll transpose our table in order to access colors by column name.\n",
    "\n",
    "**Listing 9. 9. Creating a non-blue table**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 261,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Color               Pink  Gray  Sapphire  Purple  Coral  Olive  Navy  Maroon  \\\n",
      "Click Count: Day 1    21    27        30      26     26     26    38      21   \n",
      "Click Count: Day 2    20    27        32      21     24     19    29      29   \n",
      "\n",
      "Color               Teal  Cyan  ...  Ultramarine  Yellow  Virdian  Violet  \\\n",
      "Click Count: Day 1    25    24  ...           49      14       27      15   \n",
      "Click Count: Day 2    25    22  ...           41      24       23      22   \n",
      "\n",
      "Color               Green  Aquamarine  Magenta  Silver  Bronze  Lime  \n",
      "Click Count: Day 1     14          24       18      26      19    20  \n",
      "Click Count: Day 2     25          28       21      24      19    19  \n",
      "\n",
      "[2 rows x 29 columns]\n"
     ]
    }
   ],
   "source": [
    "df_not_blue = df.T.drop(columns='Blue')\n",
    "print(df_not_blue.head(2))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Our `df_not_blue` table contains the percent-clicks for 29 colors. We would like to compare these percentages to our blue percentages. Our best option is to run a Permutation test. In order to run the test, we will need to define a reusable Permutation test function.\n",
    "\n",
    "**Listing 9. 10. Defining a Permutation test function**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 262,
   "metadata": {},
   "outputs": [],
   "source": [
    "def permutation_test(data_array_a, data_array_b):\n",
    "    data_mean_a = data_array_a.mean()\n",
    "    data_mean_b = data_array_b.mean()\n",
    "    extreme_mean_diff = abs(data_mean_a - data_mean_b)\n",
    "    total_data = np.hstack([data_array_a, data_array_b])\n",
    "    number_extreme_values = 0.0\n",
    "    for _ in range(30000):\n",
    "        np.random.shuffle(total_data)\n",
    "        sample_a = total_data[:data_array_a.size]\n",
    "        sample_b = total_data[data_array_a.size:]\n",
    "        if abs(sample_a.mean() - sample_b.mean())  >= extreme_mean_diff:\n",
    "            number_extreme_values += 1\n",
    "\n",
    "    p_value = number_extreme_values / 30000\n",
    "    return p_value"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We’ll run a Permutation test between blue and the other 29 colors. Afterwards, we’ll sort these colors based on their p-value results. Our outputs will be visualized as heatmap, to better emphasize the differences between p-values.\n",
    "\n",
    "**Listing 9. 11. Running a Permutation test across colors**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 263,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 216x720 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "np.random.seed(0)\n",
    "blue_clicks = df.T.Blue.values\n",
    "color_to_p_value = {}\n",
    "for color, color_clicks in df_not_blue.items():\n",
    "    p_value = permutation_test(blue_clicks, color_clicks)\n",
    "    color_to_p_value[color] = p_value\n",
    "\n",
    "sorted_colors, sorted_p_values = zip(*sorted(color_to_p_value.items(), \n",
    "                                             key=lambda x: x[1]))\n",
    "plt.figure(figsize=(3, 10))\n",
    "sns.heatmap([[p_value] for p_value in sorted_p_values],\n",
    "            cmap='YlGnBu', annot=True, xticklabels=['p-value'],\n",
    "            yticklabels=sorted_colors)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The majority of colors generate a p-value that is noticeably lower than 0.05. Black has the lowest p-value.  What exactly is the difference between recorded clicks for black and blue? We can find by printing `df_not_blue.Black.mean()`.\n",
    "\n",
    "**Listing 9. 12. Finding the mean click-rate of black.**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 264,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Mean click-rate of black is 21.6\n"
     ]
    }
   ],
   "source": [
    "mean_black = df_not_blue.Black.mean()\n",
    "print(f\"Mean click-rate of black is {mean_black}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The mean click-rate of black is 21.6. This value is prominently lower than the blue mean of 28.35.  Let's filter out those colors whose mean is less than the mean of blue. \n",
    "\n",
    "**Listing 9. 13. Filtering colors with inferior click-rates**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 265,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5 colors have on average more clicks than Blue.\n",
      "These colors are:\n",
      "['Sapphire' 'Navy' 'Teal' 'Ultramarine' 'Aquamarine']\n"
     ]
    }
   ],
   "source": [
    "remaining_colors = df[df.T.mean().values > blue_clicks.mean()].index\n",
    "size = remaining_colors.size\n",
    "print(f\"{size} colors have on average more clicks than Blue.\")\n",
    "print(\"These colors are:\")\n",
    "print(remaining_colors.values)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Only five colors remain. Each of these colors is a different shade of blue. Let’s print the sorted p-values for the five remaining colors. We’ll also print the mean-clicks, for easier analysis.\n",
    "\n",
    "**Listing 9. 14. Printing the five remaining colors**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 266,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Ultramarine has a p-value of 0.0034 and a mean of 34.2\n",
      "Navy has a p-value of 0.5911666666666666 and a mean of 29.3\n",
      "Aquamarine has a p-value of 0.6654666666666667 and a mean of 29.2\n",
      "Sapphire has a p-value of 0.7457666666666667 and a mean of 28.9\n",
      "Teal has a p-value of 0.9745 and a mean of 28.45\n"
     ]
    }
   ],
   "source": [
    "for color, p_value in sorted(color_to_p_value.items(), key=lambda x: x[1]):\n",
    "    if color in remaining_colors:\n",
    "        mean = df_not_blue[color].mean()\n",
    "        print(f\"{color} has a p-value of {p_value} and a mean of {mean}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 9.4. Determining Statistical Significance\n",
    "\n",
    "Only one remaining color has a p-value that's small. That color is ultramarine; a special shade of blue. Ultramarine's p-value is 0.0034. Is that p-value statistically significant? To find out, we need to execute a Bonferroni correction. Otherwise, we will fall victim to p-value hacking.\n",
    "\n",
    "**Listing 9. 15. Applying the Bonferroni correction**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 267,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Adjusted significance level is 0.001724137931034483\n",
      "Our p-value is not statistically significant\n"
     ]
    }
   ],
   "source": [
    "significance_level = 0.05 / 29\n",
    "print(f\"Adjusted significance level is {significance_level}\")\n",
    "if color_to_p_value['Ultramarine'] <= significance_level:\n",
    "    print(\"Our p-value is statistically significant\")\n",
    "else:\n",
    "    print(\"Our p-value is not statistically significant\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Our p-value is not statistically significant. Fred had carried out too many experiments for us to drawn a meaningful conclusion. Conceivably, if Fred had simply compared blue to the other 5 variants of blue, then maybe we would have obtained a statistically significant result. Let's explore the hypothetical situation where Fred instigates 5 experiments and ultramarine's p-value remains unchanged."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 268,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Hypothetical significance level is 0.01\n",
      "Our hypothetical p-value would have been statistically significant\n"
     ]
    }
   ],
   "source": [
    "hypothetical_sig_level = 0.05 / 5\n",
    "print(f\"Hypothetical significance level is {hypothetical_sig_level}\")\n",
    "if color_to_p_value['Ultramarine'] <= hypothetical_sig_level:\n",
    "    print(\"Our hypothetical p-value would have been statistically significant\")\n",
    "else:\n",
    "    print(\"Our hypothetical p-value would not not have been statistically significant\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Under these hypothetical conditions, our results would be statistically significant. Sadly, we can’t use these hypothetical conditions to lower our significance level. P-values will fluctuate, and superfluous experiments increase the chance of untrustworthy fluctuations. Given Fred’s high experiment count, we simply cannot draw a statistically significant conclusion."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
